Всем привет!
У меня есть DataGrid форма такого вида:
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Items}" SelectionMode="Single" SelectedItem="{Binding SelectedItem}" Grid.ColumnSpan="5" Grid.Row="1" CanUserReorderColumns="False" CanUserSortColumns="False" CanUserAddRows="False" RowDetailsVisibilityMode="Visible">
<DataGrid.Columns>
<DataGridComboBoxColumn x:Name="kindsEl" Header="Вид РК:" Width="25*" TextBinding="{Binding Kind.KindName, Mode=TwoWay}" SelectedValueBinding="{Binding Kind, Mode=TwoWay}" DisplayMemberPath="{Binding Kind.KindName, Mode=TwoWay}">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="{x:Type ComboBox}">
<EventSetter Event="SelectionChanged" Handler="SomeSelectionChanged" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<DataGridComboBoxColumn x:Name="themeEl" Header="Тема:" Width="25*" SelectedItemBinding="{Binding Theme}" TextBinding="{Binding Theme.FieldName}" />
<DataGridComboBoxColumn x:Name="startEl" Header="Дата от:" Width="25*" SelectedItemBinding="{Binding Start}" TextBinding="{Binding Start.FieldName}" />
<DataGridComboBoxColumn x:Name="endEl" Header="Дата до:" Width="25*" SelectedItemBinding="{Binding End}" TextBinding="{Binding End.FieldName}"/>
</DataGrid.Columns>
</DataGrid>
Где Items в DataGrid это модель данных такого вида:
class CalendarMetaItem : INotifyPropertyChanged
{
private KindModel kind;
private FieldModel theme;
private FieldModel start;
private FieldModel end;
public KindModel Kind
{
get
{
return this.kind;
}
set
{
this.kind = value;
NotifyPropertyChanged();
}
}
public FieldModel Theme
{
get
{
return this.theme;
}
set
{
this.theme = value;
NotifyPropertyChanged();
}
}
public FieldModel Start
{
get
{
return this.start;
}
set
{
this.start = value;
NotifyPropertyChanged();
}
}
public FieldModel End
{
get
{
return this.end;
}
set
{
this.end = value;
NotifyPropertyChanged();
}
}
#region INotifyPropertyChanged implementation
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
В это модели к примеру KindModel это:
class KindModel
{
public string TypeId { get; set; }
public string KindName { get; set; }
public string KindId { get; set; }
public string ParentKindId { get; set; }
public int Level { get; set; }
public override string ToString()
{
var tab = "";
for (int i = 0; i < Level; i++)
{
tab += " ";
}
return tab + KindName;
}
}
При создании окна с DataGrid у меня все DataGridComboBoxColumn заполняются кодом - так:
var allKinds = new List();
kindsEl.ItemsSource = allKinds;
При выборе нужных значений в Combobox элементах никаких проблем нет, все сохраняется правильно, кстати при сохранении все данные конвертирую в json: JsonConvert.SerializeObject(items);
При открытии окна с сохраненными данными десериалезую json объект, при этом в окне данные все десериализуются правильно, однако в combobox уже не отображаются
Если значение DataGrid AutoGenerateColumns="False" перевести в true, то в генерируемых столбцах начинают отображаться сохраненные значения правильно, но нужно, чтобы сохраненные данные при открытии окна отображались в Combobox
Пожалуйста, подскажите как это сделать?