簡體   English   中英

如何串聯WPF數據綁定以重用?

[英]How to concatenate WPF DataBindings for reuse?

假設您在XAML中具有數據綁定,該數據綁定將Apple類型的實例作為輸入並導致Banana類型的實例作為輸入。

您要利用的接口需要一個DataBinding ,它的工作是將Apple轉換為Cherry 顯然,這是從BananaCherry的相對簡單的轉換,因此您決定要做的是在XAML中創建第二個數據綁定,以執行此BananaCherry轉換。

現在,您可以從A轉到B,從B到C,但是如何將兩者串聯起來,以便傳遞能夠將Apple轉換為Cherry的完整數據DataBinding

這在香草WPF中不是必須的,我很高興編寫代碼。 例如,如果它要求諸如ConcatenatedDataBinding類之類的東西,但它具有用於輸入數據綁定列表的新屬性,那我就不會感到驚訝。

謝謝!

如果要合並多個數據綁定以實現特定的投影,則可以使用Xaml中的MultiBinding ,該綁定允許綁定許多對象,並通過專門的轉換器( IMul​​tiValueConverter )提供獨特的結果。

否則,如果有一個需要在單個綁定中處理的不同對象的列表,則可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM