我有一個似乎沒有被其他類似問題(其中大部分都無法回答)覆蓋的方案。Silverlight 4 - 將DataGrid中的ComboBox綁定到WCF客戶端的屬性合同類
這裏所說:
我有以下項目進行合作:
1)返回超過100性能非常複雜的數據合同的WCF服務。我不想創建這個對象的ViewModel,因爲我不想保留超過100個屬性,除非絕對需要。
2)I有一個Silverlight用戶控件,其具有定義爲資源這個數據契約:
<UserControl.Resources>
<DieEstimateService:DieEstimateContract x:Key="Die" />
</UserControl.Resources>
3)我有結合稱爲Die.DieMetalforming模具的集合的數據網格。這個集合是一個DieMetalformingContract對象數組。此集合中顯示兩列,即DiePunchFunctionDescription和DiePunchConstructionDescription屬性。 DiePunchFunctionDescription具有一個名爲DiePunchFunctionUID的相應鍵屬性,同樣DiePunchConstructionDescription具有一個名爲DiePunchConstructionUID的關鍵屬性。當網格處於顯示模式時,它使用TextBlocks來顯示DiePunchFunctionDescription和DiePunchConstructionDescription字段。數據網格經由代碼結合到Die.DieMetalforming陣列後面這樣:
dgDieMetalforming.ItemsSource = Die.DieMetalformings;
4)當電網處於編輯模式時,存在用於DiePunchFunction和DiePunchConstruction列組合框,這兩者都是爲界到Die對象的元數據集合。這些集合被命名爲DiePunchFunctionFields和DiePunchConstructionFields。這兩個集合都是StandardCostFieldContract對象的數組(它們根據字段的類型只有不同的數據)。 StandardCostFieldContract具有「FieldDescription」的顯示屬性和「StandardCostFieldUID」的關鍵屬性。
5)最後,datagrid包含DieMetalformingContract的Quantity屬性的第三列。在正常模式下,這是一個TextBlock,在編輯模式下,這是一個TextBox。該屬性按照預期用於雙向數據綁定。
datagrid正確地綁定到數據源,正如TextBlocks和Quantity字段的TextBox的正確功能所證明的那樣。但是,我無法讓組合框從DiePunchFunctions或DiePunchConstructions數組中加載它們的數據。我已經準備了十幾篇關於這個主題的文章,並嘗試了我可以找到的ItemSources綁定的每一個組合,但似乎沒有任何工作。這裏是我的DataGrid定義:
<sdk:DataGrid AutoGenerateColumns="False" Height="167" HorizontalAlignment="Stretch" Margin="6,255,6,0"
Name="dgDieMetalforming" VerticalAlignment="Top" Width="Auto" Grid.ColumnSpan="4"
SelectionMode="Single" TabNavigation="Local">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn CanUserReorder="False" CanUserResize="False"
CanUserSort="False" Header="Punch/Die Function" Width="Auto" >
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding DiePunchFunctionDescription}" Margin="4" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
<sdk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox Name="ddlDiePunchFunction" ItemsSource="{Binding
Path=Die.DiePunchFunctionFields, Mode=OneWay}"
SelectedItem="{Binding Path=DiePunchFunctionUID, Mode=TwoWay}"
DisplayMemberPath="FieldDescription"
SelectedValuePath="StandardCostFieldUID" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn CanUserReorder="False" CanUserResize="False"
CanUserSort="False" Header="Punch/Die Construction" Width="Auto" >
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding DiePunchConstructionDescription}" Margin="4" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
<sdk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox Name="ddlDiePunchFunction" ItemsSource="{Binding
Path=Die.DiePunchConstructionFields, Mode=OneWay}"
SelectedItem="{Binding Path=DiePunchConstructionUID, Mode=TwoWay}"
DisplayMemberPath="FieldDescription"
SelectedValuePath="StandardCostFieldUID" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn CanUserReorder="False" CanUserResize="False"
CanUserSort="False" Header="Quantity" Width="Auto" >
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Quantity}" Margin="4" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
<sdk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Name="txtQuantity" Text="{Binding Quantity, Mode=TwoWay}" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
我已經花了太多的時間在這個已經和它達到一個地步,我需要結算有關此問題的任何更多的時間之前返工的整體思路。如果您可以推薦一個將使組合框綁定到其itemsources的行動方案,我將永遠感激。
不能減少你的小說排序嗎? – codeSetter 2011-12-26 19:22:01
對不起,但我不知道如何縮短而不會丟失重要信息。 – 2011-12-26 19:24:13