【发布时间】: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<TranslationEntry> Translations属性的空类
标签: c# wpf data-binding datagrid