datagrid列按钮命令(MVVM)

Cos*_*Cos 2 silverlight datagrid mvvm

我有以下内容

<ResourceDictionary 

xmlns:vm="clr-namespace:SilverlightApplication1.ViewModels.Controls"> 

<DataTemplate DataType="vm:CVItemVM" x:Key="viewmodel">
Run Code Online (Sandbox Code Playgroud)

..........

                    <sdk:DataGrid Grid.Row="1" AutoGenerateColumns="False" Width="820" MaxColumnWidth="395" ItemsSource="{Binding Path=Publications}" Visibility="{Binding Path=Publications.Count, Converter={StaticResource ConverterVisibility2_1}}">
                        <sdk:DataGrid.ColumnHeaderStyle>
                            <Style TargetType="sdk:DataGridColumnHeader">
                                <Setter Property="FontWeight" Value="Bold" />                                     
                            </Style>
                        </sdk:DataGrid.ColumnHeaderStyle>
                        <sdk:DataGrid.Columns>
                            <sdk:DataGridTextColumn Header="Title" Binding="{Binding Path=Title}"  CanUserResize="False" IsReadOnly="True" />
                            <sdk:DataGridTextColumn Header="Author" Binding="{Binding Path=Author}" CanUserResize="False" IsReadOnly="True"  />
                            <sdk:DataGridTemplateColumn Header="">                                    
                                <sdk:DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <Button Content="{Binding Path=Id}" Command="{Binding Path=DeleteCommand, Mode=TwoWay}" />                                            
                                    </DataTemplate>
                                </sdk:DataGridTemplateColumn.CellTemplate>
                            </sdk:DataGridTemplateColumn>                                
                        </sdk:DataGrid.Columns>
                    </sdk:DataGrid>
Run Code Online (Sandbox Code Playgroud)

我面临的问题是

<Button Content="{Binding Path=Id}" Command="{Binding Path=DeleteCommand, Mode=TwoWay}" />                                            
Run Code Online (Sandbox Code Playgroud)

不触发绑定的命令.

ItemsSource="{Binding Path=Publications}"
Run Code Online (Sandbox Code Playgroud)

指的是以下(在viewmodel中)

public ObservableCollection<PublicationVM> Publications
Run Code Online (Sandbox Code Playgroud)

相同的viewmodel暴露

public ICommand DeleteCommand { get; set; }
Run Code Online (Sandbox Code Playgroud)

Dzm*_*voi 7

<Button Content="{Binding Path=Id}" Command="{Binding Path=DeleteCommand, Mode=TwoWay}" />
Run Code Online (Sandbox Code Playgroud)

此代码尝试DeleteCommand从PublicationVM对象访问属性.如果在那里定义了这样的属性,它应该工作(如果属性不是nullofc.).如果DeleteCommand在同一个VM中定义了

public ObservableCollection<PublicationVM> Publications
Run Code Online (Sandbox Code Playgroud)

然后你应该使用RelativeSource你的VM,例如:

<Button Content="{Binding Path=Id}" Command="{Binding DataContext.DeleteCommand, RelativeSource={RelativeSource AncestorType=UserControl}}" />
Run Code Online (Sandbox Code Playgroud)

where UserControl- 控件的类型where DataContext= YourViewModel