ContentControl привязка видимости не работает - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть такая привязка видимости внутри 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,Ничего не произошло. Переменные изменяются, но привязка не работает, и оба ContentControls всегда имеют Visibility, установленную как Visible, что, я думаю, является значением по умолчанию, и ни одна из них никогда не меняется на Collapsed.

1 Ответ

0 голосов
/ 08 ноября 2019

решено:

Я решил это сам, проблема была не в самой привязке, а в том, как приложение обрабатывало создание экземпляров и показ UserControl.

У меня был экземплярUserControl A, который имел этот UserControl B как часть своего содержимого. Естественно, A создал экземпляр B после своего создания. Позже я заменил экземпляр B в A другим экземпляром B (тот, что с моей viewModel), но я, вероятно, забыл сообщить визуальному дереву об этом изменении, поэтому визуально он все же показал старый экземпляр B, привязка которого не привелав любом месте.

Я бы хотел, чтобы приложение вызывало исключение, когда происходит слепая привязка (например, она привязывается к элементу, который не был создан или не содержит ошибок) вместо того, чтобы просто оставить значение по умолчанию. Такое поведение XAML порождает так много ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...