假设您在XAML中有一个数据绑定,它将Apple
类型的实例作为输入,并生成类型为Banana
的实例。
您要利用的界面需要DataBinding
,其职责是从Apple
转换为Cherry
。显然,这是从Banana
到Cherry
的相对简单的转换,因此您决定在XAML中创建第二个数据绑定,执行此Banana
到{{1转换。
现在,您可以从A到B和B到C,但是如何连接这两个,以便您可以传入一个能够将Cherry
转换为DataBinding
的完整Apple
Cherry
?
这不一定能在vanilla WPF中实现,我很乐意编写代码。我不会感到惊讶,例如,它是否需要类似ConcatenatedDataBinding
类的类,其中包含一个输入数据绑定列表的新属性。
谢谢!
答案 0 :(得分:0)
如果想要组合多个数据绑定以实现特定投影,可以使用Xaml中的MultiBinding,它允许绑定许多对象,并通过专用转换器( IMultiValueConverter)提供独特的结果。
否则,如果有一个需要在单个绑定中处理的不同对象列表,则可以使用Composite Collection存储来处理不同类的对象,但只提供单个结果。
答案 1 :(得分:0)
忽略确切的DataContext
和属性更改通知,您的说明听起来像是:
public Apple Apple { get; set; }
public Banana Banana { get; set; }
public Cherry Cherry { get; set; }
...
void OnLoad() {
SetBinding(
"Banana",
new Binding("Apple") {
Converter = (IValueConverter) FindResource("AppleToBananaConverter"),
Mode = BindingMode.OneWay
}
);
SetBinding(
"Cherry",
new Binding("Banana") {
Converter = (IValueConverter) FindResource("BananaToCherryConverter"),
Mode = BindingMode.OneWay
}
);
}
在这种情况下,我真的认为最简单的答案是创建一个AppleToCherryConverter
。您可以将Apple转移到Banana和Banana转换为Cherry转换例程到一个共享位置,供所有三个转换器使用,以便您重新使用代码:
Apple Apple { get; set; }
Cherry Cherry { get; set; }
...
void OnLoad() {
SetBinding(
"Cherry",
new Binding("Apple") {
Converter = (IValueConverter) FindResource("AppleToCherryConverter"),
Mode = BindingMode.OneWay
}
);
}