1

我在一个名为的用户控件中有以下内容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 后运行此代码。在我将其instaceOfUserInputOutput.EnumItems设置为等于 enumItems 后,它包含正确的项目,但它没有显示在我的程序的组合框中。

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

谢谢!

4

1 回答 1

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 声明为依赖属性。将它作为类字段可以正常工作,除非您想将其用作绑定目标(现在它用作绑定源)。

于 2012-08-29T20:15:45.353 回答