私はWPFでアプリケーションを作成しています。カスタムクラスのObservableCollection <にバインドされたListBoxがあります。データは、ObservableCollection <>の項目を削除するためのDELETEボタンを持つdataTemplateを使用して表示されます。WPFとC#のデータテンプレートのボタンからListBoxItemを削除する
示すように、データソースのコレクションが定義されています
public class SellItem : INotifyPropertyChanged
{
private string _name, _code, _details;
public SellItem Self
{
get { return this; }
}
public string Name
{
get
{
return _name;
}
set
{
_name = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
public string Code
{
get
{
return _code;
}
set
{
_code = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Code"));
}
}
public string Details
{
get
{
return _details;
}
set
{
_details = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Details"));
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
public class ItemCollection : ObservableCollection<SellItem>
{
static public ItemCollection theCollection = null;
public ItemCollection()
{
theCollection = this;
}
}
XAMLコードは次のようになります。
<Window x:Class="NALT_WPF.SaleWindow"
...
xmlns:local="clr-namespace:NALT_WPF"
Title="Test" Height="494" Width="838">
<Window.Resources>
<ObjectDataProvider x:Key="theItemCollection" ObjectType="{x:Type local:ItemCollection}"/>
</Window.Resources>
<Window.CommandBindings>
<!--Using command binding-->
<CommandBinding Command="Delete" Executed="CommandBinding_Executed_RemoveAll" />
</Window.CommandBindings>
<Grid>
<Grid.Resources>
<DataTemplate x:Key="ProductListItemTemplate">
<Grid>
...
<!-- This is the button on data template to remove the item from 'ItemCollection' -->
<Button Name="btRemoveAllItems" Content="X"
Command="Delete" CommandParameter="{Binding Self}">
</Button>
...
</Grid>
</DataTemplate>
</Grid.Resources>
...
<ListBox Grid.Row="1" Margin="10" Name="lstProducts"
ItemTemplate="{StaticResource ResourceKey=ProductListItemTemplate}"
ItemsSource="{Binding Source={StaticResource theItemCollection}}"
HorizontalContentAlignment="Stretch">
</ListBox>
</Grid>
、メインウィンドウのC#コード上:
public partial class MainWindow : Window
{
public SaleWindow()
{
InitializeComponent();
}
...
private void CommandBinding_Executed_RemoveAll(object sender, ExecutedRoutedEventArgs e)
{
// this is the code executed when DELETE button on data template is pressed.
// I was thinking to remove the item here
MessageBox.Show("Removing, proceed? ...");
//... ...
//...
}
}
どうしたらいいですか?テンプレート上のボタンが属するリストボックスのコレクションからアイテムを削除するにはアイテムは常に選択されたアイテムではありません。
私は任意のヘルプ に感謝:)