与WCF RIA服务的SL4绑定问题

时间:2010-08-05 17:32:27

标签: data-binding silverlight-4.0 wcf-ria-services

基本问题:如何将文本框绑定到组合框的选定项目,其中的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}" />

我的解决方案存在的问题:

它不起作用,因为当我更改组合框中的选择时,文本框不会更新。我可以实现选择更改事件处理程序并手动更新文本框,但这会破坏绑定文本框的目的。这里的最佳做法是什么?

1 个答案:

答案 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}" />