【发布时间】:2014-02-27 14:14:13
【问题描述】:
我已成功使用 ProxyElement 将我的数据网格的数据上下文传递给 DataGridColumnHeaders。但是,我正在尝试一些新的东西,我只是不知道我在这里做错了什么。
这是我想要做的:我正在创建一个 UserControl 并将它与我的资源文件中的 ViewModel 相关联(请参阅下面的 Resources.xaml 代码 sn-p)。
Resources.xaml:
<ResourceDictionary
xmlns:myVm="clr-namespace:..."
xmlns:myUserControl="clr-namespace:...">
<DataTemplate DataType={x:Type myVm:DummyModel}">
<myUserControl:DummyUserControl />
</DataTemplate>
</ResourceDictionary>
现在在我的用户控件中,我有一个带有 DataGridComboBoxColumn 的 DataGrid。我正在尝试访问我的数据上下文以设置其项目源,过去我可以使用代理元素来做到这一点。然而这一次我不能这样做。 (参见下面的 DummyUserControl.xaml 代码 sn-p)
DummyUserControl.xaml:
<UserControl x:Class="Client.MyControl.DummyUserControl"
...>
<UserControl.Resources>
<FrameworkElement x:Key="ProxyElement" x:Name="ProxyElement"
DataContext="{Binding}" />
</UserControl.Resources>
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Products}">
<DataGridComboBoxColumn
Header="Company"
ItemsSource="{Binding Path=DataContext.ProductCompanies,
Source={StaticResource ProxyElement}}"
DisplayMemberPath="Name" SelectedValuePath="Id"
SelectedValueBinding="{Binding CompanyId}" />
</DataGrid>
</UserControl>
当我这样做时,我的绑定失败并显示以下消息:
System.Windows.Data Error: 3 : Cannot find element that provides DataContext.
BindingExpression:(no path); DataItem=null; target element is 'FrameworkElement'
(Name='ProxyElement'); target property is 'DataContext' (type 'Object')
我不知道在这里做什么。我记得读过数据模板的数据上下文是自动设置的,所以我不知道为什么在这种情况下数据上下文为空。为了证明它为空,我还尝试在代码隐藏文件中设置绑定并添加断点来检查其值(为空)。
谁能建议在这里做什么?
编辑 1
我也尝试了以下方法:
完全删除 ProxyElement 并查看它是否可以检测到 DataContext。不出所料,这失败了。
尝试绑定到模板化父级。失败。
-
尝试绑定到 UserControl 本身。失败。
我还尝试引用要显示此视图模型的父项的数据上下文,它位于 TabControl 的 TabItem 中。
所有备用绑定都给了我与上述错误相同的错误。
【问题讨论】:
标签: wpf xaml datagrid datatemplate