0

依存関係プロパティを介してにバインドされたListBoxがありObservableCollection<object>ます。を使用してDataTemplateSelector、クラスタイプに基づいて、ObservableCollectionで見つかったオブジェクトのタイプを判別し、適切なDataTemplateを適用します。任意のクラスタイプの複数のオブジェクトが可能です。

私のモデルクラスの一部は以下のとおりです。関心のあるポイントのみを表示するように編集されています。

public class IPUpdater
{
   public IPUpdater()
   {
   }

   public string IPTransceiverInstall { get; set; }
   public string IPTransceiverFinal { get; set; }
   public Boolean IsFinal { get; set; }       

   public string IPTransceiver
   {
       get
       {
           return IPTransceiverAddress();
       }
   }

   private string IPTransceiverAddress()
   {
       if (!IsFinal)
           return IPTransceiverInstall;
       else
           return IPTransceiverFinal;
   }

}

IPTransceiver適切なIPUpdaterテンプレートが使用されると、XAMLDataTemplate内のTextBoxにバインドされます。IsFinal同じテンプレート内のチェックボックスにバインドされています。

質問:変更されたテキストボックスを強制的に登録するにはどうすればよいIPTransceiverですか?DependencyPropertyをIPTransceiverと等しく設定しようと考えましたが、リストボックスにクラスのインスタンスが複数ある場合、最初にその値を設定する方法がわかりませんでした。

TwoWayおよびOneWayToSourceバインディングモードは、読み取り専用プロパティでは使用できません。IsFinalCheckBoxの値が変更されたときに更新されることを確認できます。更新IPTransceiverAddress()時に強制的にトリガーしようとさえしました。IsFinal上記のいずれも、TextBoxを更新していません。ボックスを更新することができた唯一の方法は、SQLiteクエリを繰り返すことです。これは避けたいと思います。

ありがとう!

4

1 に答える 1

1

バインディングソースとして使用する予定のクラスはすべて、を実装する必要がありますINotifyPropertyChanged。ViewModel(およびビューを直接バインドする場合はモデル)は、このインターフェイスを実装PropertyChangedし、WPFバインドエンジンがこれらの変更をUIに反映するためにイベントを発生させる必要があります。

于 2013-01-31T20:55:27.390 に答える