【问题标题】:WPF XAML can not see checkboxes in ListViewWPF XAML 在 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>

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

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

谢谢大家 干杯

【问题讨论】:

    标签: c# wpf xaml 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>
      

      【讨论】:

        猜你喜欢
        • 2016-07-21
        • 1970-01-01
        • 2018-06-10
        • 2017-05-10
        • 1970-01-01
        • 2014-08-23
        • 1970-01-01
        • 1970-01-01
        • 2014-10-15
        相关资源
        最近更新 更多