【问题标题】:datagrid column button command (MVVM)datagrid 列按钮命令 (MVVM)
【发布时间】:2012-11-24 15:15:25
【问题描述】:

我有以下

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

【问题讨论】:

  • 你尝试过RelativeSource Binding吗?顺便说一句,你应该写出你真正的问题是什么。

标签: silverlight mvvm datagrid


【解决方案1】:
<Button Content="{Binding Path=Id}" Command="{Binding Path=DeleteCommand, Mode=TwoWay}" />

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

public ObservableCollection<PublicationVM> Publications

那么你应该在你的虚拟机上使用RelativeSource,例如:

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

UserControl - 您的控件类型其中DataContext = YourViewModel

【讨论】:

  • 在花了将近一天的时间之后,RelativeSource 的建议终于对我有用了。
猜你喜欢
  • 2017-07-25
  • 2011-04-25
  • 1970-01-01
  • 2015-06-07
  • 2018-01-15
  • 2018-06-02
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多