をにバインドしようとしてComboBox
いますObservableCollection<MyType>
が、期待どおりに機能していません。のインスタンスを作成するとComboData
、たとえば
ComboData = new ObservableCollection<MyType>();
それにデータを追加します。
ComboData.Add(new MyType(string.Format("{0}", i.ToString()), i));
Value
のプロパティMyType
が設定され、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;
}
}
で選択したアイテムを変更したときにイベントハンドラーを起動するにはどうすればよいComboBox
ですか?