Как связать DataGridComboBoxColumn с коллекцией и свойством - PullRequest
0 голосов
/ 10 июня 2019

Я хочу создать 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?

Кроме того, когда добавляется новый элемент, копия объекта, выбранного из списка, должна храниться в модуле.свойство предмета.Как бы я этого достиг?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...