我在名为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
包含正确的项目,但它不会显示在我的程序的组合框中。
不知道我在哪里错了。有什么想法吗?
谢谢!
答案 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声明为依赖属性。将它作为类字段可以正常工作,除非你想将它用作绑定的目标(现在它被用作绑定源)。