Флажок в 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 при каждом изменении состояния флажка. Для более подробной информации посмотрите пример здесь.