【发布时间】:2020-10-12 22:44:33
【问题描述】:
我在反映数据绑定的可观察集合中的变化时遇到了一些困难。
我有一个列表框,其中填充了观察集合中的值。当我添加或删除项目时,这会反映在绑定控件中。但是,当我更改要显示的值时,这不会反映出来。
例如,添加一个标题为“第 1 周”的周对象(工作正常) - 现在,将标题更改为“爱好”(未反映在绑定到可观察列表的控件中)
下面是我的课程管理命名空间,父类 courses 和子类 weeks
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
using System.Windows;
namespace Management.Courses
{
[DataContract(Name = "Course")]
class cCourse
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
MessageBox.Show(propertyName);
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public cCourse()
{
Weeks = new ObservableCollection<cWeek>();
}
#region "Core Properties"
[DataMember(Name = "Title")]
public string Title { get; set; }
[DataMember(Name = "Weeks")]
private ObservableCollection<cWeek> _Weeks;
public ObservableCollection<cWeek> Weeks
{
get
{
return _Weeks;
}
set
{
if (value != this._Weeks)
{
_Weeks = value;
NotifyPropertyChanged();
}
}
}
}
[DataContract(Name = "Week")]
class cWeek
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#region "Core Properties"
[DataMember(Name = "Title")]
private string _Title { get; set; }
public string Title
{
get
{
return _Title;
}
set
{
if (value != this.Title)
{
_Title = value;
NotifyPropertyChanged();
}
}
}
#endregion
}
}
在我的窗口中,我有以下内容:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Core;
namespace Management.Courses
{
public partial class MgnCourses_Add : Window
{
private cCourse oCourse;
public MgnCourses_Add()
{
InitializeComponent();
oCourse = new cCourse();
//Set Data Context
DataContext = oCourse;
cWeek oWeek = new cWeek();
//Get/Set week title
oWeek.Title = "Week " + e.NewValue;
//Update week listing
oCourse.Weeks.Add(oWeek);
}
private void ctrlTopics_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
oCourse.Weeks[ctrlTopics.SelectedIndex].Title = "New String";
}
}
}
列表框的控件绑定是:
<ListBox x:Name="ctrlTopics" Margin="100,131,439,49" ItemsSource="{Binding Weeks}" DisplayMemberPath="Title" MouseDoubleClick="ctrlTopics_MouseDoubleClick">
我可以通过调试看到可观察列表值正在正确更改 - 它只是没有反映在列表框中。
任何帮助/指针将不胜感激。
【问题讨论】:
标签: c# wpf data-binding