所有
我真的陷入了一个非常基本的概念 - 我找不到我真正理解的答案。
我有一个视图 - viewContacts。它的datacontext是一个viewmodel - viewmodelContacts。
在视图中我有'标题'的组合框(你知道......先生,夫人,小姐等)。我想绑定itemssource,以便显示一个选项列表,并绑定SelectedValue,以便将密钥存储在viewmodelContacts TitleId属性中。
'source'列表,如果标题(我想将ItemsSource绑定到)实际上是在一个单独的静态类中 - 注意不是viewmodel!
internal static class Titles
{
static IList<Title> _colTitles = null;
static Titles()
{
_colTitles = new List<Title>();
_colTitles.Add(new Title() { TitleId = 1, Description = "Mr." });
_colTitles.Add(new Title() { TitleId = 2, Description = "Mrs." });
_colTitles.Add(new Title() { TitleId = 3, Description = "Miss." });
_colTitles.Add(new Title() { TitleId = 4, Description = "Ms." });
}
internal static IList<Title> GetTitles()
{
return _colTitles;
}
}
(稍后,当然,这些东西将从数据库中获取)。
这个简单的任务超出了我作为WPF开发人员的才能。
如何将ItemsSource设置为此静态类?如何进一步将DisplayMemberPath设置为基础Title对象的Description属性?
我将SelectedValue和SelectedValuePath设置为什么?
真的希望有人可以帮我解决一些看似无法解决的简单问题。
谢谢, 灰色
答案 0 :(得分:2)
在你的viewModel中创建一个如下属性:
public IList<Title> VmTitles
{
get
{
return Titles.GetTitles();
}
}
private Title _selectedTitle;
public Title SelectedTitle
{
get
{
return _selectedTitle;
}
set
{
if (value != _selectedTitle)
{
_selectedTitle = value;
OnPropertyChanged("SelectedTitle");
}
}
}
然后在.xaml中执行此操作:
<ComboBox x:Name="cboTitle" ItemsSource="{Binding Path=VmTitles}" DisplayMemberPath="Description" SelectedItem="{Binding Path=SelectedTitle}" />
答案 1 :(得分:1)
<ComboBox x:Name="cboTitle" SelectedValuePath="TitleId" DisplayValuePath="Description" SelectedValue="{Binding PropertyToBeUpdatedHere}"/>
然后在代码中设置组合框的项目源..
cboTitle.ItemsSource = Titles.GetTitles();
答案 2 :(得分:0)
只需使用ObjectDataProvider。
<UserControl.Resources>
<ObjectDataProvider x:Key="cboSource" ObjectType="local:Titles" MethodName="GetTitles"/>
</UserControl.Resources>
<ComboBox ItemsSource="{Binding Source={StaticResource cboSource}}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Description}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
ps:您必须将内部静态更改为公共静态。