将WPF组合框绑定到特定的字典实例

时间:2011-02-22 18:23:48

标签: c# wpf data-binding dictionary combobox

我是WPF的新手,我正在尝试使用组合框进行数据绑定。我有一个名为FolderList的类,它基本上包装了FileSystemWatcher实例。它有一个名为Folders的属性,它返回文件夹名称及其完整路径的字典。

然后,对于我的WPF窗口的类,它包含一个名为FolderWatcher的FolderList实例,该实例在构造函数中配置。我想在一个特定的FolderList实例中将组合框数据绑定到字典中。

我找到了存在数据对象的静态实例或通过XAML创建它们的示例,但我无法弄清楚如何绑定到特定实例。

如果在XAML或C#中完成,我不会选择。我基本上已经使用ObjectDataProvider获得了这一点。

<Window.Resources>
<ObjectDataProvider x:Key="ProjectNames"
        ObjectType="{x:Type local:FolderList}"
    />
</Window.Resources>

这是我想要数据绑定的组合框。这不会产生任何错误,但也不会填充。我知道我错过了ObjectDataProvider中的一些主要内容,但我只是不知道它是什么。

<ComboBox Name="ProjectCombo" MinWidth="100" ItemsSource="{Binding Source={StaticResource ProjectNames}, Path=Folders}" />

1 个答案:

答案 0 :(得分:1)

此处不需要ObjectDataProvider。只需在ItemsSource的构造函数中直接设置ComboBox的{​​{1}},即可初始化Window的实例:

FolderList

另一种选择是将public MyWindow() { InitializeComponent(); FolderWatcher = new FolderList(...); ProjectCombo.ItemsSource = FolderWatcher.Folders; } 的实例设置为窗口的FolderList,然后使用绑定来设置DataContext ComboBox`:

ItemsSource of the

}

public MyWindow()
{
    InitializeComponent();

    FolderWatcher = new FolderList(...);

    DataContext = FolderWatcher;

我建议你研究一下MVVM pattern。如果您根据该模式设计了应用程序,则视图模型实例将作为视图的<ComboBox Name="ProjectCombo" MinWidth="100" ItemsSource="{Binding Folders}" /> ,并且视图模型将公开您可以绑定的属性。