我的Silverlight应用程序遇到了一些问题,我希望你们中的一个可以帮助我。 :)我正在尝试为数据网格设置datatemplate但是在绑定方面遇到了一些麻烦。似乎当我将绑定模式设置为“TwoWay”时,我收到以下错误:
请注意,我正在尝试绑定到自动“分配”到datatemplate的DataContext
Provide value on 'System.Windows.Data.Binding' threw an exception.
有人能为我提供这个问题的解决方案吗?我的目标是将datatemplate放在一个单独的视图中,以允许对我的数据网格进行更大的自定义。以下是我正在尝试的一个愚蠢的版本:
<sdk:DataGrid ItemsSource="{Binding items}" SelectedItem="{Binding selItem, Mode=TwoWay}">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Width="*">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<View:leadDataTemplate item="{Binding Mode=TwoWay}"/>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
<View:leadDataTemplate item="{Binding Mode=TwoWay}"/>
是我试图初始化的视图。
希望你能得到这个想法,提前感谢任何建议或答案!
修改
请注意,item
是依赖项属性,如果在对项目进行更改时更新源并不重要,我只需要datagrid在item
中显示信息,所以我需要设置依赖属性,谢谢!
第二次修改
我认为问题可能是我的Binding没有将任何数据传递给视图,你知道为什么会这样吗?我知道items
部分正在填充,为什么绑定是空的?另请注意,依赖属性应该更新另一个视图模型,如下所示:
public static readonly DependencyProperty itemProperty = DependencyProperty.Register("item", typeof(object), typeof(leadDataTemplate), new PropertyMetadata(new PropertyChangedCallback(itemChanged)));
public leadStreamData item
{
get { return (object)GetValue(itemProperty); }
set { SetValue(itemProperty, value); }
}
private static void itemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var ctrl = (leadDataTemplate)d;
if (ctrl != null)
ctrl._vm.item = ctrl.item;
}
答案 0 :(得分:0)
只有在您希望更新源数据时才需要双向绑定。
以下内容应该足够了:
<sdk:DataGrid ItemsSource="{Binding items}" SelectedItem="{Binding selItem, Mode=TwoWay}">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Width="*">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<View:leadDataTemplate item="{Binding .}"/>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
要使用TwoWay绑定,您必须提供Path属性,例如
<TextBox Text="{Binding FirstName, Mode=TwoWay}" />