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);
}
}
}
我有一个带有存储库的页面 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);
}
}
}