WPF 将组合框绑定到依赖方法

WPF bind combobox to dependency method

我有一个带有存储库的页面 dependency,页面中有一个组合框我想绑定到依赖项的某个方法

public class MyPage : Page
{
    private Dependency dep {get; set;} //method: GetAll() - returns IEnumerable<Foo>
...
}

我想在 xaml 中绑定组合框,而不是在后面的代码中。

看来我必须将页面的 DataContext 属性 指向页面本身

DataContext="{Binding RelativeSource={RelativeSource Self}}"

但在那之后我不知道如何继续。

显然在代码隐藏中它会是

mycombobox.ItemsSource = dep.GetAll();
mycombobox.DisplayValuePath = "FooName";
mycombobox.SelectedValuePath = "FooId";

不知道 class Dependency 是什么,但是添加另一个 属性 怎么样,您可以绑定到:

public class MyPage : Page
{
    public Dependency Dep { get; set; }

    public IEnumerable<Foo> AllDeps
    {
        get { return Dep.GetAll(); }
    }
}

现在您可以像

那样绑定组合框
<ComboBox ItemsSource="{Binding Path=AllDeps}" />

作为替代方案,您可以将 AllDeps 声明为 ObservableCollection,并在需要时添加元素:

public class MyPage : Page
{
    public Dependency Dep { get; set; }

    public ObservableCollection<Foo> AllDeps { get; set; }

    public MyPage()
    {
        AllDeps = new ObservableCollection<Foo>();
        InitializeComponent();

        // initialize Dep

        foreach (var d in Dep.GetAll())
        {
            AllDeps.Add(d);
        }
    }
}