2012-12-06 64 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