我有一个简单的对象,比如:
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>
文本列显示得很好,但组合框却没有-根本不显示值。绑定错误是:
系统.Windows.数据错误:2:找不到目标元素的控制FrameworkElement或FrameworkContentElement。String:String = String; String =null;目标元素为“DataGridComboBoxColumn”(HashCode=11497055);目标属性为“ItemsSource”(类型为“IEnumerable”)
我该如何解决此问题?
4条答案
按热度按时间zd287kbt1#
这是最好的解决方案:
http://wpfthoughts.blogspot.com/2015/04/cannot-find-governing-frameworkelement.html
这里的想法是将CollectionViewSource声明为静态资源,然后以声明方式将其绑定到DataGridComboBoxColumn的ItemsSource。
创建并绑定一个静态CollectionViewSource:
然后绑定目标ItemsSource:
4ioopgfo2#
问题在于Columns没有继承DataContext。
查看更多Binding in a WPF data grid text column
这里blogs.msdn.com/vinsibal/archive/2008/12/17/wpf-datagrid-dynamically-updating-datagridcomboboxcolumn.aspx
这里是http://blogs.msdn.com/jaimer/archive/2008/11/22/forwarding-the-datagrid-s-datacontext-to-its-columns.aspx
vom3gejh3#
如果您的度量对于所有对象都是通用的,则可以将度量设置为静态的
您的xaml将使用它,如下所示:
希望能帮上忙。
bwntbbo34#
如果您希望将行的数据上下文项绑定到组合框,则可以在其模板中使用
ComboBox
和DataGridTemplateColumn
。请注意,您必须将Mode=TwoWay, UpdateSourceTrigger=PropertyChanged
属性添加到SelectedItem
绑定中,否则它将无法正确更新。