他の同様の質問ではカバーされていないようなシナリオがあります(そのほとんどは未対応です)。Silverlight 4 - DataGridのComboBoxをWCFのクライアント契約クラスのプロパティにバインドする
はここに行く:
私はで動作するように、以下の項目があります。
1)100以上のプロパティを持つ、非常に複雑なデータコントラクトを返すWCFサービス。私はこのオブジェクトのViewModelを作成したくないので、絶対に必要でない限り、を100以上のプロパティを維持する必要はありません。
2)私は、リソースとして定義され、このデータコントラクトを持つSilverlightのユーザーコントロールを持っている:
<UserControl.Resources>
<DieEstimateService:DieEstimateContract x:Key="Die" />
</UserControl.Resources>
3)I持ってDie.DieMetalformingと呼ばれるダイのコレクションに結合するデータグリッド。このコレクションは、DieMetalformingContractオブジェクトの配列です。このコレクションから表示する列は、DiePunchFunctionDescriptionプロパティとDiePunchConstructionDescriptionプロパティの2つです。 DiePunchFunctionDescriptionにはDiePunchFunctionUIDという対応するキープロパティがあり、同様にDiePunchConstructionDescriptionにはDiePunchConstructionUIDというキープロパティがあります。グリッドが表示モードのとき、TextBlocksを使用してDiePunchFunctionDescriptionフィールドとDiePunchConstructionDescriptionフィールドを表示します。データグリッドは、次のようなコードビハインド介しDie.DieMetalformingアレイに結合されている:
dgDieMetalforming.ItemsSource = Die.DieMetalformings;
4)グリッドが編集モードである場合、拘束されることになっているどちらもDiePunchFunctionとDiePunchConstruction列のコンボボックスがありますDieオブジェクトからのメタデータのコレクションに渡します。これらのコレクションはDiePunchFunctionFieldsとDiePunchConstructionFieldsという名前です。どちらのコレクションもStandardCostFieldContractオブジェクトの配列です(フィールドの型に基づいて異なるデータを持つだけです)。 StandardCostFieldContractの表示プロパティは "FieldDescription"で、キープロパティは "StandardCostFieldUID"です。
5)最後に、データグリッドにはDieMetalformingContractのQuantityプロパティの3番目の列が含まれています。ノーマルモードではTextBlockであり、編集モードではTextBoxです。このプロパティは、双方向データバインディングの目的で動作しています。
DataGridは、TextBlocksの正確な機能とQuantityフィールドのTextBoxで示されるように、データソースに正しくバインドされます。しかし、私は、データをDiePunchFunctionsまたはDiePunchConstructions配列からロードするコンボボックスを取得できません。私はこのテーマに関する12の記事を準備しており、見つけられたItemSourcesバインディングのすべての順列を試しましたが、何も動作していないようです。ここに私のデータグリッドの定義です:私はすでにこの上であまりにも多くの時間を費やしてきた
<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>
、それは私がこの問題上の任意のより多くの時間のために課金する前に全体的なアイデアを手直しする必要がある点に達しています。コンボボックスをアイテムソースに結びつけるような行動を推薦できるなら、私は永遠に感謝しています。
あなたの小説を並べ替えることはできませんか? – codeSetter
申し訳ありませんが、重要な情報を失うことなく短くする方法はわかりません。 –