DependencyProperty的ObservableCollection返回null

时间:2015-06-25 13:43:16

标签: c# wpf datagrid custom-controls

我在使用数据网格和两个按钮创建自定义控件的传奇,一个用于添加,另一个用于从数据网格中删除元素。有些事情如下图所示。

enter image description here

现在我可以通过公开DependecyProperty来添加元素并将datagrid的ItemsSorce直接与我的ViewModel的Collection绑定。 Here是我在此处提出的另一个问题中的代码。请考虑@Sandesh更正。

现在我想通过添加每个用法应该相同的行为来实现删除按钮:它将删除数据网格的选定行。为此,我将上面的代码添加到CustomDatagrid.xaml的代码中:

private void RemoveButtonClick(object sender, RoutedEventArgs e)
        {
            var selectedItem = CustomDataGrid.SelectedValue;

            if (selectedItem != null && Colection != null)
            {
                Colection.Remove(selectedItem);
            }
        }

但是当我按下删除按钮时 Colection返回null并且没有任何反应。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您正在混淆代码集。您从CustomDataGrid.SelectedValue获取所选项目,然后尝试从Collection集合中删除该项目。尝试通过将另一个属性绑定到CustomDataGrid.SelectedItem属性并将其删除来删除它:

<DataGrid Name="CustomDataGrid" ItemsSource="{Binding Collection}" 
    SelectedItem="{Binding YourNewSelectedItemProperty}" ... />

...

Colection.Remove(YourNewSelectedItemProperty);

更新&gt;&gt;&gt;

进一步澄清:

如果集合中确实存在该确切项目,则只能从集合中删除项目。在您的情况下,您正在使用返回的SelectedValue属性(来自链接页面):

  

使用SelectedValuePath 获得的SelectedItem的值

请注意我突出显示的部分。这不一定返回实际选定的项目。实际上,根据SelectedValuePath属性的值,它可能只返回所选项的属性。因此,您应该使用SelectedItem属性,或者使用绑定到该属性的数据的对象。