我正在进行一个项目,在该项目中,我需要将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>而政务司司长:
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属性,因此问题与上下文无关。将列的绑定模式设置为双向也于事无补,因为默认情况是双向的。
我发现了许多与相反问题有关的帖子:更新条目源,而不是更新UI,但有些文章我怎么也找不到。
谢谢你的帮助!
发布于 2019-10-22 07:06:56
我找到了解决方案,它不是绑定,只是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,谢谢您的帮助。
https://stackoverflow.com/questions/58492847
复制相似问题