我在使用数据网格和两个按钮创建自定义控件的传奇,一个用于添加,另一个用于从数据网格中删除元素。有些事情如下图所示。
现在我可以通过公开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并且没有任何反应。
感谢您的帮助。
答案 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
属性,或者使用绑定到该属性的数据的对象。