Как осуществить привязку ListBox к списку объекта класса?
Есть класс:
public class Project
{
public ObservableCollection<String> Names { get; set; } = new ObservableCollection<String>();
}
Есть вью-модель:
public class MainWindowVM
{
public Project Project = new Project();
public ObservableCollection<String> TestCollection { get; set; }
public MainWindowVM()
{
Project.Names = new ObservableCollection<String>
{
"Name1",
"Name2",
"Name3",
"Name4",
"Name5"
};
TestCollection = Project.Names;
}
}
И окно:
<Window x:Class="TestListBoxBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TestListBoxBinding"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<local:MainWindowVM/>
</Window.DataContext>
<ListBox x:Name="ContactsListBox" ItemsSource="{Binding Path=Project.Names}" Margin="5"/>
</Window>
Почему не выводится список имен, хотя если ItemsSource установить значение {Binding Path=TestCollection}, то все работает, как нужно?
Ответы (1 шт):
Автор решения: Vadim
→ Ссылка
Binding работает только со свойствами. В вашем примере public Project Project - поле.
Замените его на свойство:
public Project Project {get;set;}
public ObservableCollection<String> TestCollection { get; set; }
public MainWindowVM()
{
Project = new Project();
Project.Names = new ObservableCollection<String>
{
"Name1",
"Name2",
"Name3",
"Name4",
"Name5"
};
TestCollection = Project.Names;
}