在应用程序设置中绑定到对象字段

时间:2011-03-31 22:51:00

标签: c# xaml binding

为了控制List<CustomObject>的序列化,我将该列表放在一个类中,例如:

public class SerializableCustomObjectList : IXmlSerializable
{
  public List<CustomObject> CustomObjectList = new List<CustomObject>();
  ...
}

public class CustomObject {...}

,其实例存储在“应用程序设置”中。我对序列化/反序列化没有任何问题。但是,当我尝试将公共属性CustomObjectList绑定到ListBox时,没有任何反应。

这是我的代码:

<ListBox Name="CustomObjectListBox">
  <ListBox.ItemsSource>
    <Binding Source="{x:Static p:Settings.Default}"
      Path="SavedCustomObjects.CustomObjectList"/>
  </ListBox.ItemsSource>
  ...
</ListBox>

其中SavedCustomObjects是Properties.Settings.Default中SerializableCustomObjectList的实例。

当前行为是ListBox Items.Count保持为零(在调试器中),即使填充了SavedCustomObjects.CustomObjectList

1 个答案:

答案 0 :(得分:4)

我可以看到一些事情:

  1. 您应该将ItemsControl(例如ListBox)绑定到ObservableCollection,而不是List。
  2. 您只能绑定到属性,而不是字段(即使用get / set)。
  3. 作为DataContext的类应该实现INotifyPropertyChanged,而setter(从第2点开始)应该引发PropertyChanged事件。