Как связать XamDataGrid со свойствами модели через ViewModel
В моем приложении C#/WPF я и пытаюсь привязать инфраструктуру WPG XamDataGrid к инфраструктуре к ObservableCollection. MyViewModel предоставляет свойство Model. Когда я добавляю свойство, значение которого я хочу отобразить в MyViewModel, все работает нормально. Ниже показан пример, в котором я привязываюсь к свойству UnitID, предоставляемому экземпляром MyViewModel, содержащимся в UnitsOfMeasure ObservableCollection.
Если я изменю "Имя" на "Model.Name", во время выполнения в сетке данных появится правильное количество строк, но все поля будут пустыми. Ошибка во время выполнения не возникает.
Мой обходной путь - добавить каждое свойство в 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;
}
}
1 ответ
Вложенное связывание поддерживается элементом управления XamGrid - http://help.infragistics.com/Help/NetAdvantage/WPF/2012.1/CLR4.0/html/xamGrid.html
Или же
Обратитесь по этой ссылке справки 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; }
}
}