私は次のような状況です:
class A { myCollection = new ObservableCollection<B>();
....
myCollection.Add(new B1());
myCollection.Add(new B2());
....
for each (B b in myCollection)
b.DoWork();
}
ここで、B は一連の特殊なサブクラス (B1、B2 など) を持つ抽象クラスです。B には "State" プロパティと、そのサブクラスによってオーバーライドされる DoWork メソッドがあります。状態プロパティは、特化された DoWork ごとに異なる方法で変更されます。
abstract class B {
string _state = null;
public string State
{
get
{
return _state;
}
set
{
_state = value;
OnPropertyChanged( "State" );
}
public bool DoWork();
}
class B1:B {
override public bool DoWork()
{
State = "Press button XXXX to do something";
.....
return true;
}
}
class B2:B {
override public bool DoWork()
{
State = "Press button YYYY to do something else";
....
return true;
}
}
私のxamlファイルのdatacontextはAで、Bindingの設定方法がわかりません:
<Window.DataContext>
<!-- Declaratively create an instance of A-->
<VW:A />
</Window.DataContext>
....
<TextBox Text="{Binding Path=????State????}" />
呼び出し時にデータバインディングで TextBox のテキストを変更したい
for each (B b in myCollection)
b.DoWork();
いくつかのバインディング命令を試しましたが、うまくいきません....
ソリューション Sherigan のおかげで:
コレクション内のすべてのオブジェクトのすべてのプロパティをまとめて表示したい場合は、SHERIGANソリューションが適していますが、
私が実際に達成しようとしていたのは、すべて同じビジュアル コンポーネントを更新するオブジェクトのコレクションを持つことでした。コレクション内のオブジェクトは状態を表すため、アクティブなオブジェクトは常に 1 つだけです。だから私がしたことは、クラスAを編集することです:
class A { myCollection = new ObservableCollection<B>();
....
private B temp;
myCollection.Add(new B1());
myCollection.Add(new B2());
....
for each (B b in myCollection) {
temp = b
temp.DoWork();
}
public B TEMP
{
get
{
return temp;
}
set
{
temp = value;
OnPropertyChanged( "TEMP" );
}
}
そしてxamlで
<TextBox Text="{Binding Path=TEMP.State}"/>
}