0

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は最初の値に応じて表示されたままになるか、表示されないままになります。

これを適切に行うにはどうすればよいですか?ありがとう。

4

2 に答える 2

1

インターフェイスの代わりに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;
    }
于 2013-01-12T19:15:03.430 に答える
0

あなたのバインディングが正しい場合。コードクラスがビューにバインドされたクラスで INotifyPropertyChanged インターフェイスを実装していることを確認するだけでよく、チェックボックスの状態が変化するたびに RaisePropertyChanged イベントが発生しています。詳細については、こちらの例をご覧ください。

于 2013-01-12T06:31:08.060 に答える