2010-08-05 112 views
0

基本问题:如何将文本框绑定到组合框的选定项目,该组合框的itemsource是WCF RIA服务域上下文中的LINQ查询的结果。WCF RIA服务SL4绑定问题

附加要求:当所选项目被更改时,绑定应该更新。 附加要求:绑定应该是两种方式。

我迄今为止的解决方案:用户点击创建一个新的项目

后,会创建新的项目,并添加到设置的对象,但(对于每种语言之一)尚未持久。之后,此代码运行。组合框应该允许用户选择其中一个创建的项目,它以相应的语言显示。绑定的文本框应该允许用户编辑项目。

后面的代码:

//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

尝试结合DataContexts不是一次设置它们。就像DataContext =“{Binding SelectedItem,ElementName = LanguageComboBox}”。 – 2010-08-05 22:41:36

+0

我非常放心,你的建议奏效!现在作出答案,以便我可以检查它:P感谢GAZILLION BAZILLION MILLION!在一段代码刚开始按照您期望的方式工作几个小时/天之后,您就没有什么可以感受到的解脱。 – cmaduro 2010-08-06 00:53:44

回答

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