использование viewmodel для управления нажатием кнопки - PullRequest
1 голос
/ 01 сентября 2011

я пытаюсь управлять кнопкой_клик через модель представления (MVVM).Я использовал следующий код для создания команды

<Button x:Name="GetData" Content="Get Data" Margin="8,8,223,0"   VerticalAlignment="Top">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <cmd:EventToCommand Command="GetData_Click"></cmd:EventToCommand>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

событие clicked должно вернуть список людей.

Может кто-нибудь предложить мне решение "Как мы можем создать команду в viewmodel?"Пожалуйста, предоставьте ответ с примером кода ..

Спасибо заранее ..

Ответы [ 3 ]

4 голосов
/ 01 сентября 2011

Если вы используете MVVM light, вы можете сделать что-то похожее на следующее:

private RelayCommand _getData_Click = null;
public RelayCommand GetData_Click
{
    get
    {
        return _getData_Click ?? _getData_Click = new RelayCommand(
            () =>
            {
                // Get Person List
            });
    }
}

Пример этого есть на страница кодового комплекса MVVM Lights

Обновление Вы, вероятно, получаете сообщение об ошибке, потому что вам нужно использовать DataBinding для настройки команды, попробуйте

<Button x:Name="GetData" Content="Get Data" Margin="8,8,223,0" VerticalAlignment="Top" Command="{Binding Path=GetData_Click}"/>

или изменив объявление EventToCommand на:

<cmd:EventToCommand Command={Binding GetDataCommand} />

Это должно работать, если вы установили свою ViewModel в качестве DataContext.

0 голосов
/ 01 сентября 2011

В viewmodel вы можете написать свою команду (используя также MVVM Light Toolkit)

RelayCommand getDataCommand;
public RelayCommand GetDataCommand
{
    get
    {
        if (getDataCommand == null)
        {
            getDataCommand = new RelayCommand(() =>
            {
                //Here comes the command implementation
            });
        }
        return getDataCommand;
    }
}

В представлении измените EventToCommand на это:

<cmd:EventToCommand Command={Binding GetDataCommand} />
0 голосов
/ 01 сентября 2011

Если у вас есть ViewModel в качестве DataContext за представлением, и у вас есть команда в вашей ViewModel с именем GetData_Click, то вам нужно сделать следующее:

  <Button Command="{Binding Path=GetData_Click"}>

Однако у меня есть ощущение, что GetData_Click - это функция (по названию), поэтому в вашей ViewModel вам необходимо определить свойство команды, например ::

  public ICommand GetDataCommand 
  {
       get {  return (_getDataCommand  = _getDataCommand ?? new DelegateCommand(GetData));  }
  } 

где GetData - это функция. Простую реализацию DelegateCommand можно найти здесь .

...