如何在Silverlight中将依赖属性绑定到datatemplate的datacontext而不抛出错误?

时间:2014-08-25 19:34:41

标签: c# silverlight binding datagrid datacontext

我的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;
        }

1 个答案:

答案 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}" />