首页 > 解决方案 > WPF XAML 在 ListView 中看不到复选框

问题描述

我正在开发一个小型 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>

但不幸的是,文本框下方没有显示任何内容......

但是现在一切都是空的,我不知道为什么..

谢谢大家干杯

标签: c#wpfxamllistbox

解决方案


您无法绑定方法。请改用属性。

<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();

        }
}

您可以参考此链接了解更多详情

看待!


推荐阅读