[英]How to concatenate WPF DataBindings for reuse?
假設您在XAML中具有數據綁定,該數據綁定將Apple
類型的實例作為輸入並導致Banana
類型的實例作為輸入。
您要利用的接口需要一個DataBinding
,它的工作是將Apple
轉換為Cherry
。 顯然,這是從Banana
到Cherry
的相對簡單的轉換,因此您決定要做的是在XAML中創建第二個數據綁定,以執行此Banana
到Cherry
轉換。
現在,您可以從A轉到B,從B到C,但是如何將兩者串聯起來,以便傳遞能夠將Apple
轉換為Cherry
的完整數據DataBinding
?
這在香草WPF中不是必須的,我很高興編寫代碼。 例如,如果它要求諸如ConcatenatedDataBinding
類之類的東西,但它具有用於輸入數據綁定列表的新屬性,那我就不會感到驚訝。
謝謝!
如果要合並多個數據綁定以實現特定的投影,則可以使用Xaml中的MultiBinding ,該綁定允許綁定許多對象,並通過專門的轉換器( IMultiValueConverter )提供獨特的結果。
否則,如果有一個需要在單個綁定中處理的不同對象的列表,則可以使用Composite Collection存儲來處理不同類的對象,但是提供單個結果。
忽略確切的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
}
);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.