0

異なる XAML ファイルの CheckBox に関連する異なるダイアログ (クラス) には、次の 2 つのオプションがあります。

最初のペア:

C#:

public class FirstClass : DependencyObject
{
   public static readonly DependencyProperty testProperty = 
      DependencyProperty.Register("testProperty", typeof(bool),
      typeof(FirstClass), 
      new UIPropertyMetadata(false));

   public bool testProperty
   {
      get { return (bool)this.GetValue(testProperty); }
      set { this.SetValue(testProperty, value); }
   }
}

XAML:

<CheckBox IsChecked="{Binding Path=testProperty, Mode=TwoWay}">

2 番目のペア:

C#

public class SecondClass : DependencyObject
{
   public static readonly DependencyProperty testProperty =
      FirstClass.testProperty.AddOwner(typeof(SecondClass));

   public bool testProperty
   {
      get { return (bool)this.GetValue(testProperty); }
      set { this.SetValue(testProperty, value); }
   }
}

XAML:

<CheckBox IsChecked="{Binding Path=testProperty, Mode=TwoWay}">

最初のダイアログのオプションを 2 番目のダイアログのオプションにバインドしたい (A<=>B)。最初のダイアログの CheckBox がオンになっている場合は、2 番目のダイアログの CheckBox もオンにする必要があります。この目的でApplicationSettingsを使用する必要がありますか?

4

1 に答える 1

2

DataBinding は、2 つの依存関係プロパティ間のバインドだけでなく、1 つの CLR と 1 つの依存関係プロパティ間のバインドのプロセスでもあります。実際、これは通常、最も一般的なバインディング シナリオです。できることは、UI 要素の値を格納するモデル オブジェクトを使用し、それを別のビューまたは別のコントロールで再利用することです。まず、DependencyObject 派生オブジェクトをデータ ホルダーとして使用しないことをお勧めしますが、それでも有効ですが、短所もあります。

まず、データのみを格納するデータ オブジェクトです。読みやすさのために実装を残したので、INotifyPropertyChanged インターフェイスの実装方法を調べてください。

class DataHolder : INotifyPropertyChanged
{
    public bool MyValue
    {
        get{return mMyValue;}
        set{mMyValue = value; RaiseProperty("MyValue");}
    }

    private bool mMyValue;
}

このオブジェクトは、UI DataContext の助けを借りて、UI 要素に簡単にバインドできるようになりました。DataContext が継承された依存関係プロパティであることを理解することは非常に重要です。つまり、コントロールのツリーでは、要素にデータ コンテキストが設定されていない場合、親のデータ コンテキストが自動的に取得されます。ユーザー名とパスワードを入力するログイン ダイアログを考えてみてください。ユーザー名とパスワードのような 2 つのプロパティを持つ単純なモデルがある場合、このモデルをダイアログのデータ コンテキストとして設定するだけで、すべてのコントロールがこれらのプロパティにバインドできます。例に戻ると、DataHolder のインスタンスをウィンドウの datacontext プロパティに設定するだけです

public MainWindow()
{
    InitializeComponents();
    var model = new DataHolder();
    DataContext = model;
}

これで、このように xaml でバインディングを使用できるようになりました

<CheckBox IsChecked="{Binding MyValue, Mode=TwoWay}"/>

複数のコントロールを同じプロパティにバインドでき、別のビューを開いたときに同じモデルを使用できます。

最後のアドバイスとして、msdn の DataBinding の章を読む必要があります。MVVM パターンは WPF で広く使用されており、大きな成功を収めているため、 MVVM パターンを調べることをお勧めします。かなり大規模なアプリケーションに使用しており、非常に満足しています。

于 2012-11-28T11:19:20.530 に答える