为什么WPF ComboBox ItemsSource Binding在设置时不会更新?

时间:2012-08-29 20:04:03

标签: c# wpf xaml properties dependencies

我在名为UserInputOutput的用户控件中有以下内容:

<ComboBox Grid.Column="1" Background="White" Visibility="{Binding InputEnumVisibility}"     
          FontSize="{Binding FontSizeValue}" Width="Auto" Padding="10,0,5,0"     
          ItemsSource="{Binding EnumItems}"     
          SelectedIndex="{Binding EnumSelectedIndex}"/>    

我在这里有几个绑定,除了ItemsSource之外,它们都很好用。这是我的依赖属性和公共变量。

public ObservableCollection<String> EnumItems
{
    get { return (ObservableCollection<String>)GetValue(EnumItemsProperty); }
    set { SetValue(EnumItemsProperty, value); }
}

public static readonly DependencyProperty EnumItemsProperty =
    DependencyProperty.Register("EnumItems", typeof(ObservableCollection<string>),typeof(UserInputOutput)

除了ComboBox的ItemSource之外,所有绑定都在XAML中设置。这必须在运行时设置。在我的代码中,我使用以下内容:

ObservableCollection<string> enumItems = new ObservableCollection<string>();
UserInputOutput.getEnumItems(enumItems, enumSelectedIndex, ui.ID, ui.SubmodeID);
instanceOfUserInputOutput.EnumItems = enumItems;

我从文件加载XAML后运行此代码。 {I}设置等于enumItems后,instaceOfUserInputOutput.EnumItems包含正确的项目,但它不会显示在我的程序的组合框中。

不知道我在哪里错了。有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我假设您的ViewModel类(用作绑定源的类)实现了INotifyPropertyChanged接口。否则更新将无效。

然后,在你的setter方法中,执行以下操作:

set
{
     // set whatever internal properties you like
     ...

     // signal to bound view object which properties need to be refreshed
     OnPropertyChanged("EnumItems");
}

其中OnProperyChanged方法是这样的:

protected void OnPropertyChanged(string propertyName)
{
    PropertyChangedEventHandler handler = this.PropertyChanged;
    if (handler != null)
    {
        var e = new PropertyChangedEventArgs(propertyName);
        handler(this, e);
    }
}
顺便说一句,我不知道为什么你需要将EnumItems声明为依赖属性。将它作为类字段可以正常工作,除非你想将它用作绑定的目标(现在它被用作绑定源)。