【问题标题】:Rows in datagrid bound but the item source is not updated when edited数据网格中的行绑定但项目源在编辑时未更新
【发布时间】:2019-10-21 19:18:58
【问题描述】:


我正在一个项目中,我需要将 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; }
        }
    }

绑定似乎在显示项目时起作用: Editable Rows

但事实证明,翻译集合没有更新。保留以前的值。网格(DataGrid 所在)的数据上下文设置为 TranslationModel 属性,因此问题与上下文无关。将列的绑定模式设置为双向也无济于事,因为默认情况下是双向的。
我发现了许多与相反问题相关的帖子:更新项目源而不更新 UI,但有些我在这个上找不到任何东西。
感谢您的帮助!

【问题讨论】:

  • 你的TranslationModel是什么样的?
  • 嗨@Keithernet,TranslationModel 现在只包含 Translations 集合。只是一个带有public ObservableCollection&lt;TranslationEntry&gt; Translations 属性的空类

标签: c# wpf data-binding datagrid


【解决方案1】:

我找到了解决方案,它从来不是绑定,只是 TranslationEntrystruct 的事实:

    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,感谢您的帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 2011-04-12
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多