我正在遵循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>
答案 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);
}