簡體   English   中英

如何將集合綁定到 WPF:DataGridComboBoxColumn

[英]How to bind collection to WPF:DataGridComboBoxColumn

我有一個簡單的對象,如:

class Item
{
  ....

  public String Measure { get; set; }
  public String[] Measures {get; }
}

我試圖將其綁定到具有兩個文本列和一個組合框列的 DataGrid。 對於組合框列,屬性 Measure 是當前選擇,Measures 可能的值。

我的 XAML 是:

<DataGrid Name="recipeGrid" AutoGenerateColumns="False" 
          CellEditEnding="recipeGrid_CellEditEnding" CanUserAddRows="False"
          CanUserDeleteRows="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Food" Width="Auto"
                            Binding="{Binding Food.Name}" />
        <DataGridTextColumn Header="Quantity" IsReadOnly="False"
                            Binding="{Binding Quantity}" />

        <DataGridComboBoxColumn Header="Measure" Width="Auto"
                                SelectedItemBinding="{Binding Path=Measure}"
                                ItemsSource="{Binding Path=Measures}" />

    </DataGrid.Columns>
</DataGrid>

文本列顯示得很好,但組合框不是 - 根本不顯示值。 綁定錯誤是:

System.Windows.Data 錯誤:2:找不到目標元素的管理 FrameworkElement 或 FrameworkContentElement。 BindingExpression:Path=Measures; 數據項=空; 目標元素是“DataGridComboBoxColumn”(HashCode=11497055); 目標屬性是“ItemsSource”(類型“IEnumerable”)

我該如何解決?

這是最好的解決方案:

http://wpfthoughts.blogspot.com/2015/04/cannot-find-governing-frameworkelement.html

這里的想法是將CollectionViewSource聲明為靜態資源,然后以聲明方式將其綁定到DataGridComboBoxColumn 的ItemsSource 。

創建並綁定一個靜態 CollectionViewSource:

 <Page.Resources>
     <CollectionViewSource x:Key="Owners" Source="{Binding Owners}"/>
 </Page.Resources>

然后綁定你的目標 ItemsSource:

ItemsSource="{Binding Source={StaticResource Owners}}"

如果您的度量對於所有對象都是通用的,那么您可以將度量設為靜態

public String[] Measures { get; }

您的 xaml 將使用它,如下所示:

<DataGridComboBoxColumn
    Header="Role"
    SelectedValueBinding="{Binding Role}"
    ItemsSource="{Binding Source={x:Static local:ProjectsDataContext.Roles}}"
    DisplayMemberPath="Name"/>

希望它會有所幫助。

暫無
暫無

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

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