将嵌套属性绑定到列表框的数据
本文关键字:数据 列表 嵌套 属性 绑定 | 更新日期: 2023-09-27 18:35:57
我无法从绑定到 ListBox 的自定义对象中的可观察集合中获得任何显示。当我的视图模型中有一个字符串集合时,这工作正常,但是当我尝试通过自定义对象访问该属性时,没有显示名称。 我在输出窗口中没有收到任何错误。
这是我的代码:
自定义对象
public class TestObject
{
public ObservableCollection<string> List { get; set; }
public static TestObject GetList()
{
string[] list = new string[] { "Bob", "Bill" };
return new TestObject
{
List = new ObservableCollection<string>(list)
};
}
}
哈姆勒
<Window x:Class="TestWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListBox Height="100" HorizontalAlignment="Left" Margin="120,61,0,0" Name="listBox1" VerticalAlignment="Top" Width="120" ItemsSource="{Binding Path=TObj.List}" />
</Grid>
萨姆.cs
public partial class MainWindow : Window
{
private ModelMainWindow model;
public MainWindow()
{
InitializeComponent();
model = new ModelMainWindow();
this.DataContext = model;
this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
}
public void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
this.model.Refresh();
}
}
视图模型
public class ModelMainWindow : INotifyPropertyChanged
{
private TestObject tObj;
public event PropertyChangedEventHandler PropertyChanged;
public TestObject TObj
{
get
{
return this.tObj;
}
set
{
this.tObj = value;
this.Notify("Names");
}
}
public void Notify(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
public void Refresh()
{
this.TObj = TestObject.GetList();
}
}
无法绑定到私有属性。此外,更改通知针对错误的属性,将"Names"
更改为"TObj"
。(我还建议使List
属性仅获取(由readonly
字段支持),或实现INoptifyPropertyChanged
以便更改不会丢失)
您的List
是私有的。使其成为公共属性,否则 WPF 无法看到它。