ContentControl可见性绑定不起作用

我在UserControl中有一个可见性绑定。

<Grid x:Name="_dockPanelMain">

    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <ContentControl Grid.Row="0" cal:Regionmanager.RegionName="{x:Static Member=consts:RegionNames.Mainmenu}" DockPanel.Dock="Top" Visibility="{Binding MainmenuVisibility,Mode=TwoWay}"/> 
    <ContentControl Grid.Row="0" x:Name="dockManagerModules" cal:Regionmanager.RegionName="{x:Static Member=consts:RegionNames.Modules}" Visibility="{Binding ModulesVisibility,Mode=TwoWay}"/>
    <ContentControl Grid.Row="1" x:Name="dockManagerStatusBar" cal:Regionmanager.RegionName="{x:Static Member=consts:RegionNames.StatusBar}"/>
</Grid>

此用户控件具有一个ViewModel,其相关部分是

        private void SwitchMenuAndmodulViews(object sender)
    {
        if (ModulesVisibility == Visibility.Visible)
        {
            ModulesVisibility = Visibility.Collapsed;
            MainmenuVisibility = Visibility.Visible;
        }
        else
        {
            ModulesVisibility = Visibility.Visible;
            MainmenuVisibility = Visibility.Collapsed;
        }
    }

        private Visibility _modulesVisibility = Visibility.Visible;
    public Visibility ModulesVisibility
    {
        get { return _modulesVisibility; }
        set
        {
            _modulesVisibility = value;
            RaisePropertyChangedEvent(() => ModulesVisibility);
        }
    }

    private Visibility _mainmenuVisibility = Visibility.Collapsed;
    public Visibility MainmenuVisibility
    {
        get { return _mainmenuVisibility; }
        set
        {
            _mainmenuVisibility = value;
            RaisePropertyChangedEvent(() => MainmenuVisibility);
        }
    }

调用SwitchMenuAndmodulView时,没有任何反应。变量会更改,但是绑定不起作用,并且两个ContentControl都始终将Visibility设置为Visible,我想这是默认设置,而且它们都没有更改为Collapsed。

lotusdy 回答:ContentControl可见性绑定不起作用

已解决:

我自己解决了问题,问题不在于绑定本身,而在于应用程序实例化并显示UserControl的方式。

我有一个UserControl A实例,该UserControl B作为其内容的一部分。自然地,A在创建时创建了B的实例。 后来,我用另一个B实例(使用我的viewModel)替换了A中B的实例,但是我可能忘了告诉视觉树有关更改,因此在视觉上它仍然显示旧的B实例,其绑定未导致任何地方。

我希望应用程序在发生盲绑定(例如,它绑定到未实例化或拼写错误的元素)时抛出异常,而不是只保留默认值。 XAML的这种行为会产生许多错误。

本文链接:https://www.f2er.com/3136213.html

大家都在问