В одном представлении содержится DataGrid. DataGrid представляет собой список материалов, и каждый материал содержит единицу, которую можно выбрать с помощью DataGridComboBoxColumn.
DataGrid и DataGridComboBoxColumn привязаны к двум различным ObservableCollection
в моей модели представления: один для материалов и один для единиц. Эти коллекции инициализируются из базы данных при запуске.
Проблема в том, что когда я впервые загружаю страницу после ее инициализации, DataGridComboBoxColumn не имеет выбранного значения.
Это происходит потому, что отображаемый объект объекта внутри объекта материала не совпадает с объектом в коллекции объектов, инициализированной из базы данных.
Это код вида:
<DataGrid ItemsSource="{Binding Materials}" AutoGenerateColumns="False" Margin="10,10,10,0" Style="{StaticResource AzureDataGrid}">
<DataGrid.Columns>
<DataGridTextColumn Header="Matériel" Binding="{Binding Name, ValidatesOnDataErrors=True}" Width="*"/>
<mah:DataGridNumericUpDownColumn Header="Prix"
Binding="{Binding Price}"
StringFormat="C"
Minimum="0"
Width="*"/>
<DataGridComboBoxColumn Header="Unité"
ItemsSource="{Binding Source={StaticResource Units}}"
SelectedItemBinding="{Binding Unit, ValidatesOnDataErrors=True}"
DisplayMemberPath="Name"
Width="*"/>
</DataGrid.Columns>
</DataGrid>
Это код ViewModel:
public MaterialViewModel(ISessionService sessionService, IMaterialRepository materialRepository)
{
_materialRepository = materialRepository;
Materials = sessionService.Materials;
Materials.CollectionChanged += MaterialsCollectionChanged;
foreach (var item in Materials)
{
item.PropertyChanged += MaterialPropertyChanged;
}
Units = sessionService.Units;
}
public ObservableCollection<Material> Materials { get; set; }
public ObservableCollection<Unit> Units { get; set; }
Просто чтобы быть уверенным, я попытался инициализировать коллекцию единиц с помощью объекта единиц, который находится в материальном объекте, и он работал как положено.
Кто-нибудь получил решение для этого?
Спасибо.