[英]How to fire INotifyPropertyChanged handler when I change ComboBox's selected item?
我正在嘗試將ComboBox
綁定到ObservableCollection<MyType>
但是它沒有按我期望的那樣工作。 當我創建一個ComboData
實例時,例如
ComboData = new ObservableCollection<MyType>();
並向其中添加數據,例如
ComboData.Add(new MyType(string.Format("{0}", i.ToString()), i));
我可以看到正在設置MyType
的Value
屬性,並且執行了PropertyChangedEventHandler
事件處理程序。 這是正確的功能。
問題是稍后我在ComboBox
框中選擇其他項目時。 我希望看到Value
再次被設置並觸發事件處理程序,但是什么也沒有發生。 但是,我可以看到該屬性的getter正在被觸發並返回_value
。
我做錯了什么嗎?
MyType
定義為:
public class MyType : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public MyType(string key, int value)
{
Key = key;
Value = value;
}
public string Key { get; set; }
private int _value;
public int Value
{
get { return _value; }
set
{
if (_value != value)
{
_value = value;
OnPropertyChanged("Value");
}
}
}
internal void OnPropertyChanged(string prop)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
private void IntegerItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
// this never executes *after* the ComboBox has been populated!!!
}
}
用戶控件的XAML是:
<Grid>
<ComboBox x:Name="cboItems"
DisplayMemberPath="Key"
SelectedValuePath="Value"
ItemsSource="{Binding Path=ComboData}">
</ComboBox>
</Grid>
而用戶控件背后的代碼是
public partial class ComboBoxControl : UserControl
{
public ObservableCollection<MyType> ComboData { get; set; }
public ComboBoxControl()
{
InitializeComponent();
ComboData = new ObservableCollection<MyType>();
int min = 0;
int max = 10;
for (int i = min; i <= max; i++)
{
ComboData.Add(new MyType(string.Format("{0}", i.ToString()), i));
}
cboItems.DataContext = this;
}
}
更改ComboBox
的選定項目時,我需要怎么做才能觸發事件處理程序?
最好使用具有CurrentChanged事件的CollectionView
類。您可以將CollectionView綁定到ComboBox。 因此,當selecteditem更改時..您可以從CurrentChangedEvent中的CollectionViewMember.CurrentItem獲取值
在組合框中選擇其他選項不會更改ComboData中的任何項目,而只是更改所選項目,因此不會使用MyType中的setter。 它使用getter檢索要顯示的值。
ComboBox具有SelectedItemChanged事件,該事件將在選擇新項目時觸發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.