#c# #silverlight-4.0 #mvvm #relaycommand #commandparameter
#c# #silverlight-4.0 #mvvm #relaycommand #commandparameter
Вопрос:
У меня есть Listbox, в котором отображается элемент и кнопка удаления рядом с ним. Как я могу запустить команду relay, передающую параметр viewmodel, чтобы я мог выполнить удаление.
Пример кода.
<ListBox ItemsSource="{Binding Path=CurrentUserRoles, Mode=TwoWay}" SelectedValuePath="Id" Name="lstRoles" Grid.Row="0" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Button Command="{Binding Path=RemoveFromUserRolesCommand, Mode=TwoWay}" Content="Delete">
</Button>
<TextBlock Text=" "></TextBlock>
<TextBlock Text="{Binding Path=Name}"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Просмотреть модель:
private RelayCommand _removeFromUserRolesCommand = null;
public RelayCommand RemoveFromUserRolesCommand
{
get
{
if (_removeFromUserRolesCommand == null)
{
_removeFromUserRolesCommand = new RelayCommand(
() => this.OnARemoveFromUserRolesCommand(),
() => (this._adminModel != null) );
}
return _removeFromUserRolesCommand;
}
}
private void OnARemoveFromUserRolesCommand()
{
try
{
if (!_adminModel.IsBusy amp;amp; SelectedAvailableRole != null)
{
...
}
}
catch (Exception ex)
{
...
}
}
Но это не работает. Я новичок в Silverlight, так что кто-нибудь сталкивался с подобным сценарием? Можете поделиться?
Ответ №1:
Вы должны использовать отдельную ViewModel для каждого из элементов вашего списка. Внутри вы сохраняете идентификатор элемента. Затем вы помещаете RemoveCommand внутри этой ViewModel и выполняете удаление там, используя идентификатор.