我有一个包含telerik RadGridView的WPF用户控件。控件的数据上下文被设置为MyViewModel类的一个实例。 MyViewModel类具有一个类型为ObservableCollection的myRecords属性。所述RadGridView由此约束:WPF - 数据模板绑定到ViewModel,而不是单个记录
ItemsSource="{Binding myRecords}"
在RadGridView我限定数量的列,其含有结合MyRecords的性质的DataTemplates的。这工作正常。
我添加了一个包含删除按钮的列。或者说,它包含一个DataTemplate,其中包含一个标记为“删除”的按钮。这是绑定到记录上定义的命令:
<telerik:GridViewColumn.CellTemplate>
<DataTemplate>
<Button
Command="{Binding deleteCommand}"
CommandParameter="{Binding}">
<Label>Delete</Label>
</Button>
</DataTemplate>
</telerik:GridViewColumn.CellTemplate>
而且这工作正常。我在MyRecord上定义的ICommand属性执行。
但是这里的东西 - 那不是我想要这个代码的地方。我不想在MyRecord上运行方法,我想在MyViewModel上运行一个方法,将相应的MyRecord作为参数传递。上面的CommandParameter =“{Binding}”元素传递了适当的MyRecord,所以这个部分很好。但我一直无法弄清楚如何将按钮的命令绑定到MyViewModel对象上的ICommand,而不是MyRecord上。
我一直在玩RelativeSource和AncestorType,并没有得到任何。
帮助将不胜感激。
我想我可以做到这一点。目前,我的MyRecord类是在一个不依赖于PresentationCore.dll的程序集中定义的,我想这样保留它。另一种方法是通过ObservableCollection填充包含MyRecords的包装类的实例,或者,也许我可以在ViewModel程序集中定义一个ExtensionMethod ... – 2011-12-28 03:13:01