【发布时间】:2013-10-24 14:09:49
【问题描述】:
我有以下情况:
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();
我尝试了几种绑定指令,但都不起作用......
感谢谢里根的解决方案:
如果您想显示集合中所有对象的所有属性togheter,则 SHRIGAN 解决方案很好,但是
我实际上想要实现的是拥有一个对象集合,所有这些对象都会更新 same 视觉组件。集合中的对象代表状态,因此始终只有一个处于活动状态。 所以我所做的是编辑 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}"/>
}
【问题讨论】:
标签: wpf c#-4.0 data-binding observablecollection children