creWn
@creWn
C# программист, разработчик СЭД

При открытии WPF формы не показываются сохраненные данные в DataGridComboBoxColumn элементах?

Всем привет!
У меня есть 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
Пожалуйста, подскажите как это сделать?
  • Вопрос задан
  • 150 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы