У меня есть список приложений, который привязан к ListView.Связывание команды с элементами ListView MVVM надлежащим образом
private List<_Application> _applicationList;
public List<_Application> applicationList
{
get { return _applicationList; }
set
{
_applicationList = value;
OnPropertyChanged();
}
}
ListView ItemTemplate задается как кнопка.
<ListView
ItemsSource="{Binding applicationList}"
BorderThickness="5"
Style="{DynamicResource ListViewStyle}">
<ListView.ItemTemplate>
<DataTemplate>
<Button
Command="{Binding RunCommand}"
Style="{StaticResource ApplicationButtonStyle}"
Content="{Binding name}"
Background="{Binding colorRGB}" >
</Button>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Когда я нажимаю на кнопку, я хочу, чтобы приложение запускалось. В моей модели _Application есть ActionCommand, которые запускают процессы.
public class _Application
{
public ActionCommand RunCommand
{
get
{ return new ActionCommand(action => Run()); }
}
private void Run()
{
Process p = new Process();
p.StartInfo.FileName = path;
try
{
p.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public _Application()
{
}
}
Я не уверен, правильно ли соблюден действие ActionCommand в Модели? Как правильно реализовать это в шаблоне MVVM? Где должен быть размещен ActionCommand и как связать его с ListView кнопок, так что будет запущено правильное _Application?
Благодарим вас за ответ. Это будет работать, однако я не знаю, как определить, какие _Applications должны быть переданы командам? ListView.SelectedItem не работает, так как я нажимаю кнопку, а не выбираю элемент, а затем нажимаю. – Crekate
Как я понимаю, вы хотите передать 'SelectedItem' команде. 'CommandParameter =" {Binding SelectedItem, ElementName = ListViewName} "' –
Нет, я этого не делаю, я просто пропустил CommandParameter. Все работает нормально. Огромное спасибо. – Crekate