我試圖將ComboBox
綁定到ObservableCollection<MyType>
,但它沒有像我期望的那樣工作。當我創建ComboData
的實例時,例如如何在更改ComboBox的選定項目時觸發INotifyPropertyChanged處理程序?
ComboData = new ObservableCollection<MyType>();
並向其添加數據,例如,
ComboData.Add(new MyType(string.Format("{0}", i.ToString()), i));
我可以看到的MyType
的Value
屬性被設置和PropertyChangedEventHandler
事件處理程序。這是正確的功能。
問題是當我在以後的ComboBox
中選擇不同的項目時。我期望看到Value
被再次設置並觸發事件處理程序,但沒有任何反應。但是,我可以看到該屬性的吸氣劑正在被解僱並返回_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;
}
}
我需要做什麼來當我更改中的選定項目時,請啓動事件處理程序?