Строки в сетке данных привязаны, но источник элемента не обновляется при редактировании - PullRequest
0 голосов
/ 21 октября 2019


Я работаю над проектом, в котором мне нужно привязать DataGrid к наблюдаемой коллекции следующей структуры:

    public struct TranslationEntry
    {
        public string LangCode { get; set; }
        public string LangName { get; set; }
        public string Translation { get; set; }
    }

Эта коллекция является свойством класса с именем TranslationModel. Я пытаюсь редактировать содержимое этой коллекции с помощью DataGrid. Вот XAML:

    <DataGrid x:Name="translationGrid" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" ItemsSource="{Binding Translations, UpdateSourceTrigger=PropertyChanged}"
                  AutoGenerateColumns="false" IsSynchronizedWithCurrentItem="true">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Language" Width="auto" Binding="{Binding Path=LangName, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True"/>
                <DataGridTextColumn Header="Translation" Width="*"  Binding="{Binding Path=Translation, UpdateSourceTrigger=PropertyChanged}"/>
            </DataGrid.Columns>

    </DataGrid>

И CS:

        public partial class TextTranslatorWindow : Window
    {
        public TextTranslatorWindow(TranslationModel translationModel)
        {
            InitializeComponent();
            TranslationModel = translationModel;
            grid.DataContext = TranslationModel;
        }
        private TranslationModel _translationModel;

        public TranslationModel TranslationModel
        {
            get { return _translationModel; }
            set { _translationModel = value; }
        }
    }

На данный момент TranslationModel является просто пустым классом:

    public class TranslationModel
    {
        public TranslationModel()
        {
        }

        private ObservableCollection<TranslationEntry> _translations = new ObservableCollection<TranslationEntry>();

        public ObservableCollection<TranslationEntry> Translations 
        {
            get { return _translations; }
            set { _translations = value; }
        }
    }

Привязкакажется, работает, когда элементы отображаются: Редактируемые строки

Но оказывается, что коллекция переводов не обновляется. Предыдущие значения сохраняются. Контекст данных сетки (в которой находится DataGrid) установлен в свойстве TranslationModel, поэтому проблема не связана с контекстом. Установка режима связывания столбца на Two Way также не помогла, как это предполагается в Two Way по умолчанию.
Я нашел много сообщений, касающихся противоположной проблемы: обновление источника элемента без обновления пользовательского интерфейса, но кое-что, как я не могу найти что-либо в этом.
Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 22 октября 2019

Я нашел решение, оно никогда не было обязательным, просто тот факт, что TranslationEntry был struct:

    public struct TranslationEntry
    {
        public string LangCode { get; set; }
        public string LangName { get; set; }
        public string Translation { get; set; }
    }

Это должно было быть:

    public class TranslationEntry
    {
        public string LangCode { get; set; }
        public string LangName { get; set; }
        public string Translation { get; set; }
    }

@ Keithernet, спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...