2010-08-05 114 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}" />