C# 如何在列表框中包含按钮并映射其事件?
我有一个关于如何通过列表框显示动态列表的概念问题。在列表框中,项目保存在Stackpanel中。堆栈面板中有一个字符串和一个按钮。如果单击该按钮,则该实体/项目(按钮和字符串)将从列表框中删除 1) 如何根据列表中实体的数量创建新按钮?C# 如何在列表框中包含按钮并映射其事件?,c#,wpf,binding,listbox,C#,Wpf,Binding,Listbox,我有一个关于如何通过列表框显示动态列表的概念问题。在列表框中,项目保存在Stackpanel中。堆栈面板中有一个字符串和一个按钮。如果单击该按钮,则该实体/项目(按钮和字符串)将从列表框中删除 1) 如何根据列表中实体的数量创建新按钮? 2) 如何将此按钮与列表框中的此项目关联起来? 3) 这甚至可以通过绑定实现吗 对不起,我对WPF还是新手,但我开始意识到它非常强大 如果您还可以提供一个简短的例子,或直接给我一个类似的链接,将不胜感激。非常感谢!:) 我想您需要更改控件模板和/或控件的内容模板
2) 如何将此按钮与列表框中的此项目关联起来?
3) 这甚至可以通过绑定实现吗 对不起,我对WPF还是新手,但我开始意识到它非常强大
如果您还可以提供一个简短的例子,或直接给我一个类似的链接,将不胜感激。非常感谢!:) 我想您需要更改控件模板和/或控件的内容模板。看看下面的链接
希望这有帮助。这是一个简单的例子,说明了如何做到这一点。首先,ListBox的源类。实现INotifyPropertyChanged接口和一个字符串属性的简单类
public class MyClass : INotifyPropertyChanged
{
public MyClass(string myString)
{
MyString = myString;
}
private string m_myString;
public string MyString
{
get
{
return m_myString;
}
set
{
m_myString = value;
OnPropertyChanged("MyString");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
主窗口具有MyClass的ObservableCollection。我们将窗口的DataContext设置为自身(这将使ListBox继承DataContext,以便我们可以将其ItemsSource绑定到MyClass
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyClasses = new ObservableCollection<MyClass>();
MyClasses.Add(new MyClass("My String 1"));
MyClasses.Add(new MyClass("My String 2"));
MyClasses.Add(new MyClass("My String 3"));
this.DataContext = this;
}
public ObservableCollection<MyClass> MyClasses
{
get;
private set;
}
}
<ListBox ItemsSource="{Binding MyClasses}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding MyString}" Margin="6"/>
<Button Content="Remove"
Click="RemoveListBoxItem_Click"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
private void RemoveListBoxItem_Click(object sender, RoutedEventArgs e)
{
// The clicked Button
Button button = sender as Button;
// The DataContext of the Button will be its instance of MyClass
MyClass selectedItem = button.DataContext as MyClass;
if (selectedItem != null)
{
// Remove the MyClass item from the collection
MyClasses.Remove(selectedItem);
}
}