我有一个 List<String>
在自定义用户控件中。每当List<String>
已修改,我希望自定义用户控件对 List<String>
中的每个项目都有复选框.我最初的想法(习惯于 Java)是添加复选框并直接删除它们。
但是...我知道 C# 可以做得更好。有什么方法可以将字符串“绑定(bind)”到 UI,以便它们显示为复选框? (或任何其他有效的方法?)
最佳答案
您可以通过绑定(bind) ItemsControl
轻松做到这一点到字符串列表:
<ItemsControl ItemsSource="{Binding Strings}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
但这不是很有用,因为您没有简单的方法来访问 CheckBox
的状态。 ...更好的选择是将字符串包装在一个还公开 bool
的类中。属性:
public class CheckableItem<T> : INotifyPropertyChanged
{
public CheckableItem(T value)
{
_value = value;
}
private T _value;
public T Value
{
get { return _value; }
set
{
_value = value;
OnPropertyChanged("Value");
}
}
private bool _isChecked;
public bool IsChecked
{
get { return _isChecked; }
set
{
_isChecked = value;
OnPropertyChanged("IsChecked");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
然后您可以公开 CheckableItem<string>
的列表而不是字符串列表,并按如下方式更改 XAML:
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Value}" IsChecked="{Binding IsChecked}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
如果您需要测试 CheckBox
已检查,只需测试IsChecked
CheckableItem<T>
中的属性(property)类。
如果您需要 CheckBox
要拥有 3 种状态(选中/未选中/不确定),只需将 IsChecked 声明为 bool?
而不是 bool
.
关于wpf - 将字符串列表作为复选框绑定(bind)到 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5703727/