首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据绑定中的行,但项源在编辑时不会更新。

数据绑定中的行,但项源在编辑时不会更新。
EN

Stack Overflow用户
提问于 2019-10-21 19:18:58
回答 1查看 102关注 0票数 0

我正在进行一个项目,在该项目中,我需要将DataGrid绑定到以下结构的可观察集合:

代码语言:javascript
运行
复制
    public struct TranslationEntry
    {
        public string LangCode { get; set; }
        public string LangName { get; set; }
        public string Translation { get; set; }
    }

该集合是一个名为TranslationModel的类的属性。我试图用DataGrid编辑该集合的内容。以下是XAML:

代码语言:javascript
运行
复制
    <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>

而政务司司长:

代码语言:javascript
运行
复制
        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只是一个空类:

代码语言:javascript
运行
复制
    public class TranslationModel
    {
        public TranslationModel()
        {
        }

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

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

在显示项目时,绑定似乎是有效的:可编辑行

但是事实证明,翻译集合没有被更新。保留以前的值。网格的数据上下文(其中包含DataGrid )被设置为TranslationModel属性,因此问题与上下文无关。将列的绑定模式设置为双向也于事无补,因为默认情况是双向的。

我发现了许多与相反问题有关的帖子:更新条目源,而不是更新UI,但有些文章我怎么也找不到。

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-22 07:06:56

我找到了解决方案,它不是绑定,只是TranslationEntry是一个struct的事实

代码语言:javascript
运行
复制
    public struct TranslationEntry
    {
        public string LangCode { get; set; }
        public string LangName { get; set; }
        public string Translation { get; set; }
    }

它应该是:

代码语言:javascript
运行
复制
    public class TranslationEntry
    {
        public string LangCode { get; set; }
        public string LangName { get; set; }
        public string Translation { get; set; }
    }

@Keithernet,谢谢您的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58492847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档