2016-06-22 2 views
0

У меня есть StackPanel с кнопками следующим образом,Доступ управления пользовательского интерфейса в ViewModel

<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0 10 0 0" Name="mystack"> 
    <Button Width="30" Name="btn1" Height="30" Content="1" Margin="10"/> 
    <Button Width="30" Height="30" Content="2" Margin="10"/> 
    <Button Width="30" Height="30" Content="3" Margin="10"/> 
    <Button Width="30" Height="30" Content="4" Margin="10"/> 
</StackPanel> 

Как сделать эти кнопки в качестве одного объекта и использовать его в ViewModel?
, потому что я должен проверить каждую кнопку «Содержание» с моей ViewModel собственности ..

+2

Вы должны * никогда * не обращаться к элементам управления пользовательского интерфейса в модели представления, он разбивает шаблон. –

+0

да Но нужно сделать это, чтобы проверить .. –

+0

Вы должны просто привязать интересующие свойства (например, «Контент») и взаимодействовать с этими данными, а не с элементами управления напрямую. –

ответ

0

вам нужно добавить команду кнопки и параметр командной кнопки к кнопке

<Button Content="Button1" Command="{StaticResource DoSomethingCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Content}" /> 

эта ссылка может помочь вам How to get the Content of Button in ViewModel?

это как добавить команду в MVVM

public class ViewModelBase 
    { 
     public ViewModelBase() 
     { 
     _canExecute = true; 
     } 
     private ICommand _doSomethingCommand; 
     public ICommand DoSomethingCommand 
     { 
     get 
     { 
     return _doSomethingCommand ?? (_doSomethingCommand = new CommandHandler(() => MyAction(), _canExecute)); 
     } 
     } 
     private bool _canExecute; 
     public void MyAction() 
     { 

     } 
    } 
    public class CommandHandler : ICommand 
    { 
     private Action _action; 
     private bool _canExecute; 
     public CommandHandler(Action action, bool canExecute) 
     { 
     _action = action; 
     _canExecute = canExecute; 
     } 

     public bool CanExecute(object parameter) 
     { 
     return _canExecute; 
     } 

     public event EventHandler CanExecuteChanged; 

     public void Execute(object parameter) 
     { 
      _action(); 
      } 
     } 
+0

Спасибо @Hady Allam –

+0

как получить значения этой команды в viewmodel? этот пример принимает значение в коде позади. –

+0

я отредактировал пример –

0

Вы должны создать аЬ inding.

Content={Binding SomePropertyInYourViewModel, UpdateSourceTrigger=PropertyChanged}} 
+0

спасибо @Hypenate –

Смежные вопросы