1

这是我的情况。我在画布中有多个用户控件。使用 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);

确认的。当我带回一个简单的组合框时,我绑定它的尝试不起作用。它必须是上面代码中的内容。

4

1 回答 1

0

bind.Source需要指向包含 的对象ComboItemsProperty,而不是属性本身。

Binding bind = new Binding();
bind.Mode = BindingMode.TwoWay;
bind.Source = this;
bind.Path = new PropertyPath("ComboItemsProperty");
this.SetBiding(ComboBox.ItemsSourceProperty, bind);

您可以通过以下方式检查绑定是否成功:

 if (GetBindingExpression(ComboBox.ItemsSourceProperty).Status != BindingStatus.Active)
 { 
    //binding didn't work
 }
于 2012-09-05T21:27:40.963 回答