1

ソースとターゲットは異なるプロパティですが、WPF でバインディングを作成することは可能です。

アラのようなもの

Binding="{Binding Source=MySourceProperty, Target=MyTargetProperty}"

私が何をする必要があるかについての説明を求められたとき: このプログラムでは、データベースの主キーの一部であるプロパティを編集できます。プロパティが変更されただけの場合、オブジェクトの保存方法に応じて、DB 値が更新されないか、重複が作成されます。別のターゲットを使用すると、これを機能させることができます (「古い」値を使用して何を更新するかを明示的に指定することにより)。

4

3 に答える 3

1

XAML で定義されたBindingは、それが定義されているオブジェクトとプロパティを常に対象としています。

Binding in codeを定義する場合は、ソースとターゲットを明示的に指定できます/指定する必要があります。これは、基本的に、Binding クラスがどのように機能するかです。

Binding binding = new Binding("SourceProperty"); // Sets up the source property
myBinding.Source = mySourceObject; // sets up the source object
targetProperty.SetBinding(TargetType.TargetDepProperty, binding); // This sets the target object/binding

バインディングの XAML マークアップ拡張機能は、数式のターゲット側を自動的に設定するため、バインディングを定義する対象は常にオブジェクトになります。

于 2013-04-22T16:14:53.453 に答える
0

間違った方法を尋ねる代わりに、あなたが必要とするものに答えようとします

「プロパティが変更されただけの場合、DB 値が更新されないか、重複が作成されます」

プロパティsetterset { if (this.someMember != value)で、入力した値が変更されているかどうかを確認する必要があります。

public event PropertyChangedEventHandler PropertyChanged;

private string someMember;
public int SomeProperty 
{
    get 
    { return this.someMember; }
    set 
    {
       if (this.someMember != value)
       {
           someMember = value;
           if (PropertyChanged != null)
           {
               PropertyChanged(this, new PropertyChangedEventArgs("SomeProperty"));
           }
     }
}

余談ですが (またはトピック外)、最後の WPF 記事
の codeproject DataContext が役立つ場合があります。ソース コードには、1 つの VisualModel のプロパティの更新が反映されたときのサンプルがあります (他の VM のプロパティの更新と同期されます)。

起動直後:

ここに画像の説明を入力

1 番目のテキスト ボックスに入力されたテキストは 2 番目のテキスト ボックスに反映され、2 番目のテキスト ボックスに入力されたテキストは 1 番目のテキスト ボックスに反映されます。

ここに画像の説明を入力

3D テキスト ボックスに入力されたテキストは 4 番目のテキスト ボックス (および下部のテキスト ブロック コンテンツ) に反映され、逆に、4 番目のテキスト ボックスに入力されたテキストは 3D (および下部のテキスト ブロック コンテンツ) に反映されます。

ここに画像の説明を入力

ダウンロードはDataCotext Inner Objects.zip、名前の付いたディレクトリとソリューションに解凍されることに注意してくださいBindingtoclassesstate

于 2013-04-23T04:37:34.150 に答える