这是我的情况。我在画布中有多个用户控件。使用 XamlWriter 将此画布保存到 xaml 文件中。众所周知,使用此方法不会保存绑定,因此当我使用 XamlReader 并重新读取用户控件时,绑定不再存在。
对于一个简单的测试,我一直在尝试重新绑定从 XAML 文件加载的 ComboBox ItemsSource(这是我在用户控件内部遇到的问题)。我尝试实现 INotifyPropertyChanged,但是,我的变量:
public event PropertyChangedEventHandler PropertyChanged
当我尝试设置 ComboItemsProperty 时始终为空:
public ObservableCollection<string> ComboItemsProperty
{
get { return ComboItems; } //Field
set
{
ComboItems = value;
OnPropertyChanged("ComboItemsProperty");
}
所以,我的最终目标是加载一个 xaml 文件,然后将项目添加到 ComboBox 的 ItemsSource 中,然后使用新项目更新 ComboBox。
我会以错误的方式解决这个问题吗?有人可以为我提供一个简单的工作示例吗?
编辑:
protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged
if (PropertyChanged != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
我相当确定它与加载 XAML 和不再设置绑定有关。我试过设置绑定,但没有运气。
第二次编辑:
我想我 99% 确定绑定是原因。只要我没有从文件加载组合框,我的 OnPropertyChanged 就可以正常工作。我尝试按如下方式设置绑定:
Binding bind = new Binding();
bind.Mode = BindingMode.TwoWay;
bind.Source = this.ComboItemsProperty; //Not sure about this line.
bind.Path = new PropertyPath("ComboItemsProperty");
this.SetBiding(ComboBox.ItemsSourceProperty, bind);
确认的。当我带回一个简单的组合框时,我绑定它的尝试不起作用。它必须是上面代码中的内容。