Как правильно связать DataGrid с XML в MVVM? - PullRequest
0 голосов
/ 06 февраля 2020

Я хотел бы привязать DataGrid к файлу XML, который можно обновлять / изменять с помощью двусторонней привязки.

В настоящее время источник не изменяется при обновлении.

Я попытался построить его, используя следующий код:

XAML

<DataGrid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" ItemsSource="{Binding CFCCDataView.DataView, UpdateSourceTrigger=PropertyChanged}"/>

ViewModel

public XMLCFCCTranslationList CFCCDataView { get; set; }

public VM()
{
CFCCDataView = new XMLCFCCTranslationList();
}

Модель

    class XMLCFCCTranslationList : INotifyPropertyChanged
    {
        private void RaisePropertyChanged(string prop)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
        }
        public event PropertyChangedEventHandler PropertyChanged;

        private DataView _dataView;
        public DataView DataView
        {
            get => _dataView;
            set
            {
                if (_dataView == value) return;
                _dataView = value;
                RaisePropertyChanged("DataView");
            }
        }
        public XMLCFCCTranslationList()
        {
            var dataSet = new DataSet();
            dataSet.ReadXml(@"c:\file.xml");
            var cfccDataView = new DataView(dataSet.Tables[0]);
            DataView = cfccDataView;
        }
    }

XML

<?xml version="1.0" encoding="utf-8" ?>
<Translation xmlns="">
 <CFCCTranslation CFCC="A10" FUNC_CLASS="1" SPEED_CAT="5"  />
 <CFCCTranslation CFCC="A20" FUNC_CLASS="2" SPEED_CAT="5"  />
 <CFCCTranslation CFCC="A30" FUNC_CLASS="3" SPEED_CAT="5"  />
 <CFCCTranslation CFCC="A40" FUNC_CLASS="4" SPEED_CAT="5"  />
 <CFCCTranslation CFCC="A50" FUNC_CLASS="5" SPEED_CAT="5"  />
 <CFCCTranslation CFCC="A71" FUNC_CLASS="6" SPEED_CAT="5"  />
 <CFCCTranslation CFCC="B10" FUNC_CLASS="7" SPEED_CAT="5"  />
</Translation>

1 Ответ

0 голосов
/ 17 февраля 2020

Вы должны добавить DataCntext для просмотра, чтобы он знал, откуда взять данные,

В вашем xaml.cs:

   public partial class MainWindow : Window
{
    private readonly ViewModel viewModel = new ViewModel();
    public MainWindow()
    {
        DataContext = viewModel;
        InitializeComponent();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...