我有一个问题,如何动态地将一个元素与多个不同的对象绑定。
因此,请考虑以下环境:我有一个类Engine
和另外两个类classA
和classB
。
我有一个MainWindow.xaml
,它由多个元素组成,并且Engine
更新所有这些元素,但是有一个元素与classA
或{{1}执行的指令绑定}。
我该如何实现?
直到今天,我只有一堂课,
classB
我有一个财产Engine : INotifyPropertyChanged
。
在我的
ClassA
我有一个名为ClassA : INotifyPropertyChanged
在我的xaml中,我有一个textBox,其文本绑定到InfoAboutPerfomedInstruction
我应该有一个继承自classA和classB的泛型类吗?有更优雅的方法吗?
答案 0 :(得分:0)
如果我正确理解了这个问题,那么您希望ClassA和ClassB都能够更新相同的属性,对吗?如果是这样,那么我将拥有一个支持该属性的回调的接口,如下所示:
public class IMyIterface
{
event EventHandler<int> OnChanged;
}
ClassA和ClassB都应实现此接口,并在要更改值时调用它:
public class ClassA : IMyIterface
{
public event EventHandler<int> OnChanged;
public void SomethingChanged()
{
this.OnChanged?.Invoke(this, 42);
}
}
// .. same for ClassB...
然后,您将具有一些父对象来创建这些对象,并使用INPC本身实现值并订阅以下事件:
public class ParentViewModel
{
private ClassA ClassA = new ClassA();
private ClassB ClassB = new ClassB();
public int MyValue ... // <- implements INPC
public ParentViewModel()
{
this.ClassA.OnChanged += (s, e) => this.MyValue = e;
this.ClassB.OnChanged += (s, e) => this.MyValue = e;
}
}
此父对象是您的视图绑定到的对象。这样做的好处是:
再往前走一步,ClassA / ClassB是类型IMyIterface的ParentViewModel中的属性,这些属性是通过依赖项注入框架进行设置的,但这是另一篇文章的主题。