Не удается получить словарь <> (или ObservableCollection <KVP>) для привязки к ListView - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь получить словарь для привязки к ListView.Не сработав, я изменил тип данных на ObservableCollection>, но все равно не испытывал радости.Я знаю, что упускаю что-то глупое, но ....

Данные доступны только для чтения, что означает, что пользовательский интерфейс не будет обновлять их, только код.

XAML:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    DataContext="{Binding RelativeSource={RelativeSource Self}}">  

        <ListView Grid.Column="1" Background="Orange" ItemsSource="{Binding MyItems}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Item" DisplayMemberBinding="{Binding Key}"/>
                    <GridViewColumn Header="Quantity" DisplayMemberBinding="{Binding Value}"/>
                </GridView>
            </ListView.View>
        </ListView>

Объект DataObject:

public ObservableCollection<KeyValuePair<string, int>> MyItems{ get; set; }

И присвоение:

this.MyItems = new ObservableCollection<KeyValuePair<string, int>>(
            PIData.GetNeededItems(itemName));

1 Ответ

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

Вам следует присвоить свойство MyItems до вызова InitializeComponent.

public MainWindow()
{
    MyItems = new ObservableCollection<KeyValuePair<string, int>>(
        PIData.GetNeededItems(itemName));

    InitializeComponent();
}

Если это невозможно, реализовать INotifyPropertyChanged:

public partial class MainWindow : Window, INotifyPropertyChanged
{
    ...

    public event PropertyChangedEventHandler PropertyChanged;

    private ObservableCollection<KeyValuePair<string, int>> myItems;

    public ObservableCollection<KeyValuePair<string, int>> MyItems
    {
        get { return myItems; }
        set
        {
            myItems = value;
            PropertyChanged?.Invoke(this,
                new PropertyChangedEventArgs(nameof(MyItems)));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...