2012-12-06 63 views
2

我有以下数据网格列按钮命令(MVVM)

<ResourceDictionary 

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

<DataTemplate DataType="vm:CVItemVM" x:Key="viewmodel"> 

..........

    <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> 

我现在面临的问题是,

<Button Content="{Binding Path=Id}" Command="{Binding Path=DeleteCommand, Mode=TwoWay}" />            

不触发绑定的命令。

ItemsSource="{Binding Path=Publications}" 

是指以下(在视图模型)

public ObservableCollection<PublicationVM> Publications 

相同的视图模型暴露

public ICommand DeleteCommand { get; set; } 
+0

有您尝试过的RelativeSource绑定?顺便说一句,你应该写你真正的问题是什么。 – blindmeis

回答

7
<Button Content="{Binding Path=Id}" Command="{Binding Path=DeleteCommand, Mode=TwoWay}" /> 

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

public ObservableCollection<PublicationVM> Publications 

则u应该使用RelativeSource到你的虚拟机,例如:

<Button Content="{Binding Path=Id}" Command="{Binding DataContext.DeleteCommand, RelativeSource={RelativeSource AncestorType=UserControl}}" /> 

其中UserControl - 类型的控制,其中DataContext = YourViewModel

+0

PLZ,接受这个答案,那你在找什么。 –

+0

经过近一天的时间,RelativeSource的建议终于为我效劳了。 – chill182