我有以下情况:
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();
我已经尝试了几个绑定指令,但它不起作用....
谢里根的解决方案:
如果您想同时显示集合中所有对象的所有属性,则 SHRIGAN 解决方案很好,但是
我实际上想要实现的是拥有一个对象集合,这些对象都更新相同的视觉组件。集合中的对象代表状态,因此始终只有一个处于活动状态。所以我所做的是编辑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}"/>
}