WPF XAML 在 ListView 中看不到复选框
Posted
技术标签:
【中文标题】WPF XAML 在 ListView 中看不到复选框【英文标题】:WPF XAML can not see checkboxes in ListView 【发布时间】:2019-03-04 03:15:06 【问题描述】:我正在开发一个小型 WPF 项目,
现在它包含一个窗口,该窗口应显示与列表中的许多值一样多的复选框。
出于测试目的,在我从数据库中获取值之前,我尝试了以下操作:
public class StatusOption
public string name get; set;
public bool IsSelected get; set;
public void GetSerialNumbers()
List<StatusOption> serialNumbers = new List<StatusOption>();
for(int i = 0; i<10;i++)
StatusOption x = new StatusOption();
x.name = "Random name" + i;
x.IsSelected = false;
serialNumbers.Add(x);
我的 xaml 看起来像这样:
<ListBox x:Name="SerialNumbersListBox"
AllowDrop="True"
Grid.ColumnSpan="2"
Grid.Row="2"
ItemsSource="Binding GetSerialNumbers">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="Binding serialNumbers"
IsChecked="Binding IsSelected"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
但不幸的是,文本框下方没有显示任何内容...
但现在一切都是空的,我不知道为什么..
谢谢大家 干杯
【问题讨论】:
【参考方案1】:您无法绑定方法。请改用属性。
<ListBox HorizontalAlignment="Left" Height="171" Margin="334,96,0,0" VerticalAlignment="Top" Width="248" AllowDrop="True" x:Name="SerialNumbersListBox"
ItemsSource="Binding SerialNumbers">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="Binding name"
IsChecked="Binding IsSelected"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
public class SerialNumbersListBoxViewModel : INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
public class StatusOption
public string name get; set;
public bool IsSelected get; set;
private ObservableCollection<StatusOption> _SerialNumbers;
public ObservableCollection<StatusOption> SerialNumbers
get
return _SerialNumbers;
set
if (value != _SerialNumbers)
_SerialNumbers = value;
OnPropertyChanged(nameof(SerialNumbers));
public void GetSerialNumbers()
if (_SerialNumbers == null)
_SerialNumbers = new ObservableCollection<StatusOption>();
for (int i = 0; i < 10; i++)
StatusOption x = new StatusOption();
x.name = "Random name" + i;
x.IsSelected = false;
_SerialNumbers.Add(x);
protected void OnPropertyChanged(string propertyName)
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
public SerialNumbersListBoxViewModel()
GetSerialNumbers();
您可以参考这个link了解更多详情
注意!
【讨论】:
【参考方案2】:您不能绑定到方法,只能绑定到 Properties 或 DependencyProperties。
所以您需要为您的serialNumbers
创建一个属性。您还应该实现INotifyPropertyChanged
,以便ListBox
可以知道您的属性何时更改。
public List<object> SerialNumbers
get => this._serialNumbersProperty;
set
if (!List<object>.Equals(value, this._serialNumbersProperty))
this._serialNumbersProperty = value;
OnPropertyChanged(nameof(this.SerialNumbers));
<ListBox x:Name="SerialNumbersListBox"
AllowDrop="True"
Grid.ColumnSpan="2"
Grid.Row="2"
ItemsSource="Binding SerialNumbers">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="Binding name"
IsChecked="Binding IsSelected"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
【讨论】:
以上是关于WPF XAML 在 ListView 中看不到复选框的主要内容,如果未能解决你的问题,请参考以下文章
如何为 ListView 控件中的第一个 WPF RadioButton 设置 XAML,以便默认检查?