簡體   English   中英

到DataGrid列的多個綁定

[英]Multiple Bindings to DataGrid Column

是否可以將兩個不同的數據綁定到同一DataGrid列。 假設我有一個具有屬性p1的類A,而另一個具有屬性p2的類B。 是否可以將p1和p2綁定到同一datagrid列?

您可以使用DataGridTemplate列,其中包含兩個不同的控件,每個控件都綁定到一個不同的屬性。

最簡單的方法可能是MultiBinding。 這是一個如何使用MultiBinding的簡單示例 (它利用了我喜歡的StringFormat屬性)。

像這樣:

<StackPanel>
   <TextBlock Text="{Binding ClassAProperty}"/>
   <TextBlock Text="{Binding ClassBProperty}"/>
</StackPanel>

只要這些類沒有具有相同名稱的任何屬性,它將起作用。 但這是一種丑陋的破解,並且很幸運在此方法將產生的所有虛假綁定錯誤中找到真正的綁定錯誤。

每個類型的屬性到列的映射都必須位於某個地方,但是它不必位於XAML中,這不是我要提到的地方。 我會在我的視圖模型中做到這一點。 假設我還沒有ClassA和ClassB對象的視圖模型類(並且我不想創建它們),我將實現以下內容:

public class DataGridHelper
{
   public Wrapper(object o)
   {
      ClassA a = o as ClassA;
      if (a != null)
      {
         Column1 = a.Property1;
         Column2 = a.Property2;
         ...
      }

      ClassB b = o as ClassA;
      if (b != null)
      {
         Column1 = b.Property1;
         Column2 = b.Property2;
         ...
      }

      public object Column1 { get; private set; }
      public object Column2 { get; private set; }
}

...然后將DataGrid的列綁定到DataGridHelper對象的集合。

如果確實ClassAViewModelClassBViewModel類,則只需在這兩個中都實現Column1Column2等屬性。 如果我需要支持雙向綁定和驗證,那將是必經之路。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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