WPF XAML не может видеть флажки в ListView - PullRequest
0 голосов
/ 28 сентября 2018

Я работаю над небольшим проектом 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>

Но, к сожалению, ничего не отображается под текстовым полем ...

Но пока все пусто, и я не могу понять, почему ..

Спасибо, ребята, ура

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Вы не можете связать метод.Пожалуйста, используйте свойство.

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

        }
}

Вы можете сослаться на эту ссылку для более подробной информации

С уважением!

0 голосов
/ 28 сентября 2018

Вы не можете привязать методы, вы можете привязать только свойства или 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...