Я хочу создать DataGrid
в окне WPF, которое показывает элементы на бланке
.Каждая строка состоит из описания товара, количества и единицы.Я хочу показать DataGridComboBoxColumn
в столбце единиц измерения.
Список, из которого можно выбрать единицы измерения, определен во ViewModel:
public ICollectionView UnitsList { get; set; }
public ViewModel()
{
UnitsList = CollectionViewSource.GetDefaultView(new Observablecollection<UnitModel>());
UnitsList.Add(new UnitModel() {Id = 1, Desc="hour"};
UnitsList.Add(new UnitModel() {Id = 2, Desc="piece"};
//aso….
}
Элементы каждого слипа хранятся вколлекция в модели:
public class DevSlipModel()
{
public int Id {get; set;}
public string Desc {get; set;}
public ObservableCollection<DesSlipItem> Items
//...
}
Модель элемента выглядит следующим образом:
public class DesSlipItem()
{
public int Id {get; set;}
public string Desc {get; set;}
public double Amount {get; set;}
public UnitModel Unit {get; set;}
//...
}
UnitModel определяется следующим образом:
public class UnitModel()
{
public int Id {get; set;}
public string Desc {get; set;}
}
Я пытался настроитьстолбец, подобный следующему:
<DataGrid Grid.Row="5" ItemsSource="{Binding Items}">
<DataGridComboBoxColumn DisplayMemberPath="Desc" SelectedValuePath="Id" SelectedValueBinding="{Binding Unit.Id}" Header="Unit" Width="75">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.UnitsList, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" />
<Setter Property="DisplayMemberPath" Value="Desc"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid>
При этом, когда я открываю существующую запись, в столбце единиц измерения не отображаются никакие значения.Если я открою выпадающий список в одном ряду, правильная единица измерения будет показана.
Насколько я понимаю, существует проблема с сущностями, поскольку единицы в объектах предметов - это другие объекты, чем единицы в коллекции.Каков наилучший способ или подход для реализации выпадающего списка в правильном шаблоне mvvm?
Кроме того, когда добавляется новый элемент, копия объекта, выбранного из списка, должна храниться в модуле.свойство предмета.Как бы я этого достиг?