WPF MVVM Сетка со столбцом кнопки - PullRequest
0 голосов
/ 31 августа 2018

Я следую схеме MVVM. У меня есть сетка с несколькими столбцами один столбец с кнопкой в ​​нем. Нажав на кнопку, я хочу открыть диалоговое окно, в котором должны отображаться данные, относящиеся к той конкретной строке, в которой была нажата кнопка. Но проблема связана с привязкой, так как я не могу связать элемент управления с 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 голосов
/ 31 августа 2018

вы не показываете весь свой код и контекст, но он должен работать так я предполагаю, что вы находитесь в пользовательском контроллере родительского datacontext ... (пример со списком):

<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);
}
0 голосов
/ 31 августа 2018

Перво-наперво, если ваш Button находится внутри Grid с определенным DataContext, вам не нужно устанавливать Path как Path=ParentRow.DataContext.

Ваша Command привязка должна быть такой:

<Button Command="{Binding YourVMICommand"} /> 

Вы должны определить public ICommand в своей виртуальной машине, а затем привязать его к кнопке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...