带按钮列的WPF MVVM网格

时间:2018-08-31 11:02:03

标签: c# wpf mvvm

我正在遵循MVVM模式。我有一个几列的网格,其中一列有Button。单击按钮我要打开对话框,该对话框将显示与单击该按钮的特定行相关的数据。但是问题在于绑定,因为我无法将控件与viewmodel绑定。

<Button  Command="{Binding Path=ParentRow.DataContext, 
         RelativeSource={RelativeSource AncestorType={x:Type UserControl}},
         UpdateSourceTrigger=PropertyChanged, Mode=Default}" 
         lib:Event.Binding="Click.[**NameOfViewModelMethod**]" >                                      
</Button>  

2 个答案:

答案 0 :(得分:0)

首先,如果您的Button位于带有定义的Grid的{​​{1}}内,则无需像DataContext那样设置Path

您的Path=ParentRow.DataContext绑定应如下所示:

Command

您必须在VM中定义一个<Button Command="{Binding YourVMICommand"} /> ,然后将其绑定到按钮。

答案 1 :(得分:-1)

您不会显示所有代码和上下文,但它应该像这样工作 我假设你在用户控件中校准父datacontext ... (例如listview):

<ListView   ItemsSource="{Binding listFromDataContext, IsAsync=True}" Margin="3,51,0,10"    >

<ListView.ItemTemplate >
<DataTemplate>
<grid>
 <Button   Command="{Binding DataContext.MyMethode, RelativeSource={RelativeSource AncestorType={x:Type controls:thisUserControl}}}" CommandParameter="{Binding}"   />
</grid>
</DataTemplate>
  </ListView.ItemTemplate >
</ListView>

然后在模型中

      private ICommand _MyMethode;
            public ICommand MyMethode
            {
                get
                {
                    return _MyMethode ?? (_MyMethode = new CommandHandler<MyModel.item>(x => showMessage(x), _canExecute));
                }
            }

public void showMessage(MyModel.item x)
{
MessageBox.Show(x.Info);
}