私はMVVMの初心者です。メインウィンドウは、WPFツールキットのストックDataGridを使用します。ビューモデルが1つあり、.xaml.csファイルのDataContext_Changedイベントハンドラーのみに依存します。メインウィンドウのDataContextはビューモデルです。
DataGridComboBoxColumnのItemsSourceプロパティをビューモデルのCLRプロパティ"FieldTypes"にバインドしようとしています。「FieldTypes」は、FieldTypeタイプのLinqtoSqlテーブルから派生したリストです。DataGridのItemsSourceは1つのSystem.Data.Linq.Tableからのものであり、「FieldTypes」は別のテーブルからのものであり、これら2つのテーブルには関係がありません。
FieldTypes DataGridComboBoxColumnをビューモデルの「FieldTypes」プロパティにバインドするために、DataGridTemplateColumnで使用されるDataTemplateStaticResourceを作成しました。
<DataTemplate x:Key='FieldTypeCombo' >
<ComboBox DataContext='{Binding ElementName=window, Mode=OneWay, Path=DataContext, UpdateSourceTrigger=PropertyChanged}'
ItemsSource='{Binding FieldTypes}'
DisplayMemberPath='Name'
/>
</DataTemplate>
このDataTemplateは、HeaderedContentControl.ContentTemplateなどのDataGridではなくメインウィンドウの子要素で機能しますが、DataGridTemplateColumn.CellTemplateでは機能しないことがわかりました。
DataGridComboBoxColumnをDataGridにない通常のComboBoxのComboBox.ItemsSourceプロパティにバインドしようとすると、
<c:DataGridComboBoxColumn Header="FieldType"
ItemsSource="{Binding ElementName=regularcombobox, Path=ItemsSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
/>
期待どおりに機能しますが、DataGrid内のComboBoxでは機能しません。
ビューモデルのプロパティにできるだけ多くのデータバインディングを設定したいのですが、これはStaticResourceの機会のようにも見えます。ただし、接続文字列は後までわからないため、このStaticResourceはウィンドウのロード後に変更されます。ComboBox列のItemsSourceをStaticResourceにバインドする場合でも、これもDynamicResourceもうまくいきませんでした。
MVVMを使用して、DataGrid ComboBox列をDataGridのItemsSourceとは別のコレクションにバインドする方法はありますか?または、ウィンドウのロード後にSQL接続が変更された場合でも、StaticResourceを使用してこれを実現する方法はありますか?