基本问题:如何将文本框绑定到组合框的选定项目,其中的itemsource是WCF RIA Services Domain上下文中LINQ查询的结果。
附加要求:更改所选项目后,应更新绑定。 附加要求:绑定应该是双向的。
到目前为止我的解决方案:
用户单击以创建新项目后,将创建新项目并将其添加到对象集但尚未保留(每种语言一个)。之后,此代码运行。组合框应该允许用户选择一个创建的项目,这些项目显示为相应的语言。绑定的文本框应允许用户编辑项目。
代码背后:
//Setup the combobox
LanguageComboBox.ItemsSource = dc.GeneralStatistics.Where(g => g.RelatedResourceId.Equals(guid));
LanguageComboBox.DisplayMemberPath = "Language.LanguageName";
LanguageComboBox.SelectedItem = dc.GeneralStatistics.First(g => g.Language.LanguageName.Equals("English"));
//Setup the textboxes
this.StatisticsText.DataContext = (LanguageComboBox.SelectedItem as GeneralStatistics).Text;
this.ShortDescriptionText.DataContext = (LanguageComboBox.SelectedItem as GeneralStatistics).ShortDescription;
XAML代码:
<ComboBox x:Name="LanguageComboBox" />
<TextBox x:Name="ShortDescriptionText" Text="{Binding}" />
<TextBox x:Name="StatisticsText" Text="{Binding}" />
我的解决方案存在的问题:
它不起作用,因为当我更改组合框中的选择时,文本框不会更新。我可以实现选择更改事件处理程序并手动更新文本框,但这会破坏绑定文本框的目的。这里的最佳做法是什么?
答案 0 :(得分:1)
您可以通过执行以下操作来简化代码。
代码背后:
LanguageComboBox.DataContext = dc.GeneralStatistics.Where(g => g.RelatedResourceId.Equals(guid));
XAML:
<ComboBox x:Name="LanguageComboBox" />
<TextBox x:Name="ShortDescriptionText" Text="{Binding ElementName=LanguageComboBox, Path=SelectedItem.ShortDescription}" />
<TextBox x:Name="StatisticsText" Text="{Binding ElementName=LanguageComboBox, Path=SelectedItem.LongDescription}" />