Я новичок в MVVM. В главном окне используется стандартный DataGrid из WPF Toolkit. Он имеет одну модель представления и полагается только на обработчик событий DataContext_Changed в файле .xaml.cs. DataContext главного окна - это модель представления.
Я пытаюсь связать свойство ItemsSource объекта DataGridComboBoxColumn со свойством CLR «FieldTypes» в модели представления. «FieldTypes» - это список, который является производным от таблицы Linq to Sql типа FieldType.
ItemsSource DataGrid из одной System.Data.Linq.Table, а FieldTypes из отдельной таблицы, и эти две таблицы не имеют никакой связи .
Чтобы связать FieldTypes DataGridComboBoxColumn со свойством «FieldTypes» в модели представления, я создал DataTemplate StaticResource для использования в DataGridTemplateColumn:
<DataTemplate x:Key='FieldTypeCombo' >
<ComboBox DataContext='{Binding ElementName=window, Mode=OneWay, Path=DataContext, UpdateSourceTrigger=PropertyChanged}'
ItemsSource='{Binding FieldTypes}'
DisplayMemberPath='Name'
/>
</DataTemplate>
Оказывается, этот DataTemplate будет работать с дочерним элементом главного окна НЕ в DataGrid, например, в HeaderedContentControl.ContentTemplate, но не будет работать в DataGridTemplateColumn.CellTemplate.
Если я попытаюсь связать DataGridComboBoxColumn со свойством ComboBox.ItemsSource обычного ComboBox, отсутствующего в DataGrid,
<c:DataGridComboBoxColumn Header="FieldType"
ItemsSource="{Binding ElementName=regularcombobox, Path=ItemsSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
/>
работает как положено, но не для ComboBox внутри DataGrid.
Мне бы хотелось иметь как можно больше привязки данных к свойствам модели представления, но это также выглядит как возможность для StaticResource. Однако этот StaticResource изменился бы после загрузки окна, так как строка соединения не известна до и после. Даже при привязке ItemsSource столбца ComboBox к StaticResource мне не повезло с этим или с DynamicResource.
Есть ли какой-нибудь способ выполнить это связывание столбца ComboBox DataGrid с коллекцией, отдельной от ItemsSource DataGrid, используя MVVM? Или есть способ сделать это с помощью StaticResource, даже если соединение SQL изменяется после загрузки окна?