[英]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.