我有一个可观察的集合绑定到WPF中的列表框。窗口中的一个选项是使用OpenFileDialog将项目添加到具有特定属性的列表框中。当我使用OpenFileDialog时,它立即设置可观察集合中新项目的两个属性。我正在使用INotifyPropertyChanged更新列表框。这两个新属性设置正确,现在列表框应显示新标题属性中包含的标题,并且绑定到列表框的标题文本框也应显示新标题。但是,在OpenFileDialog关闭时不会显示新标题,并且当我单击列表框中的另一个项目并返回到刚刚更改的项目时,它会更新标题文本框,但列表框中显示的标题不会更改,直到我将该项目移动到我想要更改的列表框中。WPF绑定不会更新,直到另一个动作
这里是绑定代码。
ItemsSource="{Binding Path=MyData, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
这里是浏览按钮的不工作的实施(L1是列表框)
private void browse_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog opf = new OpenFileDialog();
opf.ShowDialog();
MyData[L1.SelectedIndex].Title = System.IO.Path.GetFileNameWithoutExtension(opf.FileName);
MyData[L1.SelectedIndex].Command = opf.FileName;
}
当我只需在文本框中输入,然后点击了出来它更新列表我立即添加了新的信息。我还有一个创建新按钮,点击它后,它立即向列表框中添加一个新项目并更新其属性。唯一没有正确更新的是我给你的代码。谢谢你的帮助。
编辑:
这是我实现INotifyPropertyChanged的
的private OCLB _MyData;
public OCLB MyData
{
get
{
return _MyData;
}
set
{
_MyData= value;
FirePropertyNotifyChanged("MyData");
}
}
OCLB是观察集合。下面是函数FirePropertyNotifyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void FirePropertyNotifyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
每个这些是在部分类主窗口为WPF形式。我还有一个存储在OCLB(可观察集合)中的MyData文件的类(带有4个get/set函数)。还有一个功能为OCLB的类。
我已经加入我的实现INotifyPropertyChanged的,以我原来的问题,所以我现在能发现什么是错的。 – mjstide 2010-05-20 14:34:25
MyData似乎是您的收藏。包含属性“标题”和“命令”的类需要INotifyPropertyChanged处理。 – SergioL 2010-05-20 14:44:09
我将一个XML反序列化为一个容器。该容器是MyData。 MyData是一个ObservableCollection。 MyClass包含标题和命令属性。你是否说我需要将INotifyPropertyChanged函数放入MyClass中?或者我需要更改为INotifyCollectionChange? –
mjstide
2010-05-20 15:14:07