こんにちは私はすべての行が1つのテキストボックスと1つのボタンを含む1つのリストボックスを持っています。ListBoxのSelectedItemをバインドする
ボタンをクリックするとその行がリストボックスから削除されます。この作業はmvvmパターンで行います
私はこのためにコマンドを使用します。
これは私のXAMLです:
<DataTemplate x:Key="CategoryTemplate">
<Border Width="400" Margin="5" BorderThickness="1" BorderBrush="SteelBlue" CornerRadius="4">
<StackPanel Grid.Row="0" Orientation="Horizontal">
<TextBlock Width="300" Margin="5" Text="{Binding Path=Name}"></TextBlock>
<Button Name="btnDeleteCategory" Width="50" Margin="5"
Command="{Binding DataContext.DeleteCommand, RelativeSource={RelativeSource AncestorType=ListBox}}"
CommandParameter="{Binding}" Content="-" />
</StackPanel>
</Border>
</DataTemplate>
<ListBox Grid.Column="0" Grid.Row="0" Name="lstCategory"
ItemTemplate="{StaticResource CategoryTemplate}"
ItemsSource="{Binding Path=GetAllCategories}">
</ListBox>
とのviewmodelクラスで私は、このコマンドを持っている:GetAllCategoriesはobservecollectionのpropertある
private ObjectButtonCommand<Category> _deleteCommand;
public ObjectButtonCommand<Category> DeleteCommand
{
get
{
return _deleteCommand
?? (_deleteCommand = new ObjectButtonCommand<Category>(
_category =>
{
GetAllCategories.Remove(_category);
}));
}
}
。
、これが私のObjectButtonCommandコードです:
public class ObjectButtonCommand<T> : ICommand
where T:class
{
private Action<T> WhatToExecute;
public ObjectButtonCommand(Action<T> What)
{
WhatToExecute = What;
}
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
WhatToExecute((T)parameter);
}
}
は今、すべてのものはOKで、行が削除クリックボタン。
今私が欲しい、このプロセスを繰り返している私は、リストボックス
の1行を選択したとき、私はこのコードを試してみてください。
<ListBox Grid.Column="0" Grid.Row="0" Name="lstCategory" ItemTemplate="{StaticResource CategoryTemplate}" ItemsSource="{Binding Path=GetAllCategories}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding DataContext.DeleteCommand , RelativeSource={RelativeSource AncestorType=ListBox}}" CommandParameter="{Binding Path=SelectedItems,ElementName=lstCategory}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListBox>
をしかし、私はこのコードでは、このエラーを取得:WhatToExecute((T)パラメータ) ; { "と入力することができませんでし型のオブジェクトをキャストする 'System.Windows.Controls.SelectedItemCollection' 'Sepand.WPFProject.Model.Model.Category'。"}
私は何をすべき?
'_deleteCommand'は' readonly'でなければなりません。また、次回は質問を正しくフォーマットしてください。 –