我的WPF应用程序有2个组合框如下
<ComboBox Height="23" Name="ProjectNameComboBox" Width="215" ItemsSource="{Binding}" DisplayMemberPath="name" SelectionChanged="ProjectSelection_Changed" />
<ComboBox Height="25" Name="LangaugeComboBox" Width="108" ItemsSource="{Binding}" DisplayMemberPath="name" />
从后面的代码我使用数据库绑定
ProjectNameComboBox.DataContext = dbConnector.GetProjectNames();
LangaugeComboBox.DataContext = dbConnector.GetLanguages();
项目组合框包含项目列表
langauges组合框包含语言列表。
我想根据项目选择更新langauges组合框。
基于项目选择我能够从数据库中获取该项目的语言,但是如何在langauge组合框中设置它。
LangaugeComboBox.SelectedValue = dt.Rows [0] [0] .ToString();没有用。
和建议/帮助?
答案 0 :(得分:1)
我建议您先从事件迁移到绑定和更改通知。那将是更多的WPF方式。
所以两个组合框的代码变成这样,我删除了SelectionChanged事件处理程序,除非需要,否则我也会删除名称
<ComboBox Height="23" Width="215" ItemsSource="{Binding Projects}" DisplayMemberPath="name" SelectedItem="{Binding SelectedProject}" />
<ComboBox Height="25" Width="108" ItemsSource="{Binding Languages}" DisplayMemberPath="name" SelectedItem="{Binding SelectedLanguage}" />
然后(而不是)具有以下属性的类后面的代码,然后该类的实例作为视图的DataContext
public ObservableCollection<Project> Projects
{
get { return (ObservableCollection<Project>)GetValue(ProjectsProperty); }
set { SetValue(ProjectsProperty, value); }
}
// Using a DependencyProperty as the backing store for Projects. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ProjectsProperty =
DependencyProperty.Register("Projects", typeof(ObservableCollection<Project>), typeof(ViewModel), new PropertyMetadata(null));
public ObservableCollection<Language> Languages
{
get { return (ObservableCollection<Language>)GetValue(LanguagesProperty); }
set { SetValue(LanguagesProperty, value); }
}
// Using a DependencyProperty as the backing store for Languages. This enables animation, styling, binding, etc...
public static readonly DependencyProperty LanguagesProperty =
DependencyProperty.Register("Languages", typeof(ObservableCollection<Language>), typeof(ViewModel), new PropertyMetadata(null));
public Project SelectedProject
{
get { return (Project)GetValue(SelectedProjectProperty); }
set { SetValue(SelectedProjectProperty, value); }
}
// Using a DependencyProperty as the backing store for SelectedProject. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SelectedProjectProperty =
DependencyProperty.Register("SelectedProject", typeof(Project), typeof(ViewModel), new PropertyMetadata(null, OnSelectedProjectChanged));
public Language SelectedLanguage
{
get { return (Language)GetValue(SelectedLanguageProperty); }
set { SetValue(SelectedLanguageProperty, value); }
}
// Using a DependencyProperty as the backing store for SelectedLanguage. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SelectedLanguageProperty =
DependencyProperty.Register("SelectedLanguage", typeof(Language), typeof(ViewModel), new PropertyMetadata(null));
然后最后是属性更改处理程序
private static void OnSelectedProjectChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
View v = d as View;
v.SelectedLanguage = //your logic here eg. v.SelectedProject.Language;
}
因此,在绑定到位后,您的语言组合框将根据您设置为SelectedLanguage的值更新所选项目。
答案 1 :(得分:0)
如果您的语言ComoboBox
没有受到复杂对象的约束,并且它是string
集合,请尝试以下代码
LangaugeComboBox.SelectedItem = dt.Rows[0][0].ToString();