Флажок в MainWindow, который устанавливает значения для элементов управления, расположенных на нижележащих элементах UserControls

В классе MainWindow у меня есть флажок, который контролирует свойство, используемое многими объектами, такими как сетки, списки и т. Д. В UserControls

    <CheckBox Content="Show objects ID" Name="showID" IsChecked="False" />

чем определено свойство,

    public Visibility ShowObjectIDasVisibility
    {
        get { return showID.IsChecked.Equals(true) ? Visibility.Visible : Visibility.Collapsed; }
    }

У меня есть кое-что еще, чтобы вернуть логическое значение, ширину в зависимости от того, что следует использовать для целевого элемента управления.

Мне удалось связать элементы управления, расположенные в объектах UserControl, чтобы использовать это свойство следующим образом:

<TextBlock Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ShowObjectIDasVisibility}" />

Но он работает только один, при создании этого TextBlock, чем я могу установить флажок столько раз, сколько мне нравится, и TextBlock останется видимым или нет в зависимости от первого значения.

Как я должен сделать это правильно? Благодарю.

2 ответа

Решение

Вместо INotifyPropertyChanged интерфейс, который вы можете использовать DependencyProperty:

public Visibility ShowObjectIDasVisibility
    {
        get { return (Visibility)GetValue(ShowObjectIDasVisibilityProperty); }
        set { SetValue(ShowObjectIDasVisibilityProperty, value); }
    }
    public static readonly DependencyProperty ShowObjectIDasVisibilityProperty =
        DependencyProperty.Register("ShowObjectIDasVisibility", typeof(Visibility), typeof(MainWindow), new PropertyMetadata(Visibility.Collapsed));

Теперь, чтобы показать / скрыть TextBlock вам нужно изменить ShowObjectIDasVisibility значение.

Например, вы можете сделать это, добавив в флажок Click="OnShowID_Click и в коде позади

private void OnShowID_Click(object sender, RoutedEventArgs e)
    {
        ShowObjectIDasVisibility = ShowObjectIDasVisibility == System.Windows.Visibility.Visible ? System.Windows.Visibility.Collapsed : System.Windows.Visibility.Visible;
    }

Если ваша привязка верна. вам просто нужно убедиться, что ваш класс кода реализует интерфейс INotifyPropertyChanged в классе, привязанном для просмотра, и вы вызываете событие RaisePropertyChanged при каждом изменении состояния флажка. Для более подробной информации посмотрите пример здесь.

Другие вопросы по тегам