0

MyClassesという名前の Collection< MyClass >を含むMyControlという名前のコントロールがあります。

   <MyControl>
      <MyClasses>
         <MyClasss Value={Binding} />
      </MyClasses>
  </MyControl>

MyClassから派生したものDependencyObject

        Public Class MyClass : DependencyObject,INotifyPropertyChanged
        {
            Value  //propdp (DependencyProperty) 
        }

私は持っていDataTableます。table[0][0] にあるデータをMyClassの Value プロパティにバインドする必要があります

        Binding valuebinding = new Binding();
        valuebinding.Path = new PropertyPath("ItemArray[0]");
        valuebinding.Source = Table.Rows[0];
        valuebinding.Mode = BindingMode.TwoWay;
        BindingOperations.SetBinding(myValue, MyClass.ValueProperty, valuebinding);
        BindingOperations.SetBinding(textBlock, TextBlock.TextProperty, valuebinding);

データテーブルに存在するデータの値を動的に変更する必要がありますか? そこに問題はありますか?解決策は以下の理由に関連するかどうか?

  1. DependencyObject クラスは、Equals() メソッドと GetHashCode() メソッドをオーバーライドしてシールします。
  2. DependencyObjects はシリアライズ可能としてマークされていません
  3. DependencyObject にはスレッド アフィニティがあります。作成されたスレッドでのみアクセスできます。

注: Silverlight では正常に動作します

4

1 に答える 1

0

あなたは一つのことをしたほうがいい。dataTable オブジェクトから設定するプロパティを持つクラスを作成し、そのクラスを INotifyPropertyChanged から派生させ、このクラスのプロパティをコントロールからバインドします。以下に示す小さなコード スニペット

class MyCodeSnippet:INOtifyPropertyChanged
{
   public object MyProperty {
     get; 
     set
      {
        //Register for Notification
      }
    }

   //Implement all the INotifyPropertyChanged function
}


valuebinding.Path = new PropertyPath("MYProperty");
valuebinding.Source = MyClass;
于 2013-08-08T07:25:34.597 に答える