Как привязать XamDataGrid к свойствам модели через ViewModel

В моем приложении C#/WPF я пытаюсь связать Infragistics WPF XamDataGrid с ObservableCollection. MyViewModel предоставляет свойство Model. Когда я добавляю свойство, значение которого я хочу отобразить, в MyViewModel, все работает нормально. Ниже показан пример, в котором я привязываюсь к свойству UnitID, предоставленному экземпляром MyViewModel, содержащимся в UnitsOfMeasure ObservableCollection.

Если я изменю «Имя» на «Модель.Имя», во время выполнения в сетке данных появится правильное количество строк, но все поля будут пустыми. Ошибка выполнения не возникает.

Мой обходной путь заключается в том, чтобы добавить каждое свойство в MyViewModel и ссылаться на свойство в модели в каждом методе получения и установки. Создает избыточный код и не согласуется с демонстрацией Лорана.

Этот xaml работает:

<igEditors:XamDataGrid Theme="Royale" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Stretch" Margin="2" Name="xamDataGridUnitsOfMeasure" DataSource="{Binding Path=UnitsOfMeasure}"  VerticalAlignment="Stretch">
    <igEditors:XamDataGrid.FieldLayoutSettings>
        <igEditors:FieldLayoutSettings AutoGenerateFields="False"/>
            </igEditors:XamDataGrid.FieldLayoutSettings>
                <igEditors:XamDataGrid.FieldLayouts>
                    <igEditors:FieldLayout IsDefault="True">
                        <igEditors:FieldLayout.Fields>
                           <igEditors:Field Name="UnitID" Label="UOM ID">
                              <igEditors:Field.Settings>
                                 <igEditors:FieldSettings AllowEdit="False"/>
                              </igEditors:Field.Settings>
                           </igEditors:Field>
  .
  .
  .

Изменение UnitID на Model.UnitID не работает:

<igEditors:XamDataGrid Theme="Royale" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Stretch" Margin="2" Name="xamDataGridUnitsOfMeasure" DataSource="{Binding Path=UnitsOfMeasure}"  VerticalAlignment="Stretch">
    <igEditors:XamDataGrid.FieldLayoutSettings>
        <igEditors:FieldLayoutSettings AutoGenerateFields="False"/>
            </igEditors:XamDataGrid.FieldLayoutSettings>
                <igEditors:XamDataGrid.FieldLayouts>
                    <igEditors:FieldLayout IsDefault="True">
                        <igEditors:FieldLayout.Fields>
                           <igEditors:Field Name="Model.UnitID" Label="UOM ID">
                              <igEditors:Field.Settings>
                                 <igEditors:FieldSettings AllowEdit="False"/>
                              </igEditors:Field.Settings>
                           </igEditors:Field>
  .
  .
  .

Вот часть ViewModel, которая работает:

public class UnitOfMeasureViewModel : ViewModelBase
{
    /// <summary>
    /// Initializes a new instance of the UnitOfMeasureViewModel class.
    /// </summary>
    public UnitOfMeasureViewModel(UnitOfMeasure model)
    {
        Model = model;
        //Model.PropertyChanged += (s, e) =>
        //    {
        //        RaisePropertyChanged(e.PropertyName);
        //    };
    }

    public UnitOfMeasure Model
    {
        get;
        private set;
    }

    public string UnitID
    {
        get
        {
            return Model.UnitID;
        }

        set
        {
            Model.UnitID = value;
        }
    }

person Seth Abady    schedule 19.04.2013    source источник


Ответы (1)


Вложенная привязка поддерживается элементом управления XamGrid — http://help.infragistics.com/Help/NetAdvantage/WPF/2012.1/CLR4.0/html/xamGrid.html

Or

Обратитесь к этой ссылке справки Infragistics — http://www.infragistics.com/community/forums/t/67603.aspx

Это поможет вам сделать вложенную привязку

Else => Вы хотите извлечь интерфейс из класса объекта Model и попытаться реализовать его в классе, содержащем Model как свойство?

 public interface IModel
    {
        public string UnitId { get; set; }
    }

    public class Model : IModel
    {
        private string unitId;
        public string UnitId
        {
            get { return unitId; }
            set { unitId = value; }
        }
    }

    public class ModelParent : IModel
    {
        private Model model;
        public string UnitId
        {
            get { return model.UnitId; }
            set { model.UnitId = value; }
        }
    }
person RockWorld    schedule 19.04.2013
comment
Я не пробовал этого, но кажется, что это больше работы, чем просто добавление сквозных методов в модель представления. Тем более, что размер сетки растет. Я показал только один столбец, но эта коллекция выставляет 6 или 7, и у меня есть другие требования, где их 10 или больше. - person Seth Abady; 19.04.2013
comment
Итак, вложенная привязка поддерживается XamGrid, но не XamDataGrid, правильно? Исходя из этого предположения, я приму в качестве ответа извлечение интерфейса из объекта модели. - person Seth Abady; 19.04.2013
comment
да, и +1 =› не круто, когда люди получают ответ, принимают и не ставят тебе балл. - person denis morozov; 06.06.2013