我有一個可觀察的集合綁定到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