2015-06-25 35 views
0

我在创建一个自定义控件的数据网格和两个按钮,一个用于添加,另一个用于从数据网格中移除元素。有些东西就像下面的图片。DependencyProperty的ObservableCollection返回null

enter image description here

现在我可以添加元素,并通过暴露DependecyProperty将DataGrid的ItemsSorce直接与我的ViewModel的集合绑定。 Here是我在这里提出的另一个问题中的代码。请考虑@Sandesh更正。

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

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

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

但是,当我按下删除按钮 的保藏返回null,什么也没有发生。

感谢您的任何帮助。

+0

'DependecyProperty'在任何视图模型中都没有声明......它在'UserControl'后面的代码中声明。 – Sheridan

+0

Hellow @Sheridan,我没有在View模型中声明Dependecy属性。我在我的自定义控件的View(代码隐藏)中声明它。 –

回答

1

您正在混淆您的代码集合。您从CustomDataGrid.SelectedValue中选取项目,但尝试从Collection集合中删除该项目。尝试通过数据的属性绑定到CustomDataGrid.SelectedItem财产和移除,而不是将其删除:

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

...

Colection.Remove(YourNewSelectedItemProperty); 

UPDATE >>>

为了进一步澄清:

您只能从集合中删除一个项目如果该ex行为项目实际上存在于集合中。在你的情况,你使用的是SelectedValue属性返回(从链接的页面):

使用SelectedValuePath获得的SelectedItem,的价值。

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

+0

嗨@谢里登,谢谢你的回复。我做了你所说的,但问题不在选定的项目中,而是在“集合”本身中,因为它返回null。 –