Mef*_*to1 3 c# wpf xaml datagrid
我有一个包含少量文本列和删除按钮的数据网格:
<DataGrid ItemsSource="{Binding Customers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False" CanUserAddRows="False" SelectedItem="{Binding SelectedCustomer}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding FirstName}">
<DataGridTextColumn.Header>
<Label Content="{DynamicResource FirstName}" />
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding LastName}">
<DataGridTextColumn.Header>
<Label Content="{DynamicResource LastName}" />
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Address}">
<DataGridTextColumn.Header>
<Label Content="{DynamicResource Address}" />
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="{DynamicResource Delete}" Command="{Binding DeleteCustomerCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" CommandParameter="{Binding SelectedCustomer, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
读完这个问题并回答:
如何使用RelativeSource Binding创建DataGrid绑定到Model和ViewModel?
我补充说
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}
Run Code Online (Sandbox Code Playgroud)
部分.但是,没有任何作用.当我使用Snoop进行调试时,我可以看到DataContexts已正确设置.View 的数据文本DataGrid
是ViewModel,它使用Customers
集合属性,网格行的数据上下文Customer
是预期的单个对象.我已经检查过命令是用真实姓名引用的,并且它们是公开的.命令在ViewModel的构造函数中初始化:
DeleteCustomerCommand = new RelayCommand<Customer>(DeleteCustomer);
Run Code Online (Sandbox Code Playgroud)
和命令是私有setter的公共属性:
public RelayCommand<Customer> DeleteCustomerCommand { get; private set; }
Run Code Online (Sandbox Code Playgroud)
我只收到以下错误:
在'object'''DataGrid'(Name ='')'上找不到DeleteCustomerCommand'属性.BindingExpression:路径= DeleteCustomerCommand; DataItem ='DataGrid'(Name =''); target元素是'Button'(Name =''); target属性是'Command'(类型'ICommand')
尝试将"DataContext"添加到命令绑定中:
Command="{Binding DataContext.DeleteCustomerCommand, RelativeSource=...
Run Code Online (Sandbox Code Playgroud)
因为DeleteCustomerCommand
您DataGrid
的视图模型中没有属性但与之相关联DataGrid
.
附加信息
有时它可以帮助我为DataContext
Visual Studio助手创建一个绑定,而不是完全手动编码.只需在控件的属性网格中查找要为其创建绑定的属性.
在这种情况下它的Command
财产.左键单击命令属性文本的文本框,然后从上下文菜单中选择"创建数据绑定...".
归档时间: |
|
查看次数: |
1264 次 |
最近记录: |