WPF - MVVM - XAML Проблемы с привязкой - PullRequest
0 голосов
/ 26 января 2020

Я делаю простое приложение WPF, у которого есть первый ObservableList ViewModels:

public OuterViewModel CurrentItem
{
    get;
    set;
}

public ObservableCollection<OuterViewModel> OuterItems
{
    get;
    set;
}

OuterViewModel имеет следующие объекты:

 public string Description
 {
      get;
      private set;
 }

 public ObservableCollection<InnerViewModel> Ruote
 {
    get;
    private set;
 }

Модель внутреннего представления:

public string Name
{
get;
set;
}

public Numbers Row
{
    get;
    set;
}

Объект Numbers имеет просто пять числительных c свойств. О XAML:

<Window.DataContext>
    <local:MainWindowViewModel />
</Window.DataContext>
<ListBox Grid.Column="0" ItemsSource="{Binding OuterItems}" SelectedItem="{Binding CurrentItem}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <Label Content="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
<ListView Grid.Column="1" ItemsSource="{Binding CurrentItem.Ruote}">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name" DisplayMemberBinding="{Binding ?}"/>
                <GridViewColumn Header="Primo" />
                <GridViewColumn Header="Secondo" />
                <GridViewColumn Header="Terzo" />
                <GridViewColumn Header="Quarto" />
                <GridViewColumn Header="Quinto" />
            </GridView>
        </ListView.View>
    </ListView>

Список отображается правильно, в то время как Intellisense говорит, что я могу выбрать CurrentItem.Ruote для ListView.ItemSource. Теперь я хочу заполнить строки ListView элементами Ruote, и тут возникают проблемы: я не могу выбрать свойства InnerViewModel для размещения в ячейках. Что я делаю не так?

1 Ответ

1 голос
/ 26 января 2020

Вам нужно что-то сообщить, что свойства изменены.

Вы можете реализовать интерфейс INotifyPropertyChanged. Например:

public class ViewModel : INotifyPropertyChanged
{
    private OuterViewModel currentItem;
    public OuterViewModel CurrentItem
    {
        get { return currentItem; }
        set
        {
            currentItem = value;
            NotifyPropertyChanged(nameof(CurrentItem));
        }
    }

    private void NotifyPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...