双向绑定ObservableCollection到WPF数据网格

本文关键字:WPF 数据 数据网 网格 string 绑定 ObservableCollection | 更新日期: 2023-09-27 17:53:48

我一直在研究这个问题,但还没有找到答案。希望你们能帮上忙。

我有一个string类型的可观察集合。我想将此集合绑定到数据网格,并能够编辑/删除/添加到集合。这是我的xaml:

<DataGrid ItemsSource="{Binding Movies.Titles}"  CanUserDeleteRows="True" CanUserAddRows="True" Height="300">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Path=DataContext, RelativeSource={RelativeSource Self}}"/>
    </DataGrid.Columns>
</DataGrid>

同样的observablecollection也被绑定到一个列表框。我希望能够使用数据网格方法(上面)编辑集合,并在列表框中查看更改/编辑。删除/添加工作正常,但当我编辑一个网格单元格内的字符串,它失去焦点,字符串回到它原来是什么,从来没有得到更新。

非常感谢您的帮助/建议。

双向绑定ObservableCollection<string>到WPF数据网格

哇,我昨天去做这个,被一个DataGrid卡住了,它会为我的ObservableCollection添加一个新行。经过研究,我明白了原因。字符串和不可变。

我发现了这个问题,不幸的是它没有答案。所以我不能留下一个空的答案。

所以这里是我找到的答案:

  1. DataGrid不能通过添加、编辑或删除字符串来更新字符串集合。

  2. 我找到了一个解决方案,将字符串包装在StringWrapper对象中。

    公共类StringWrapper{公共字符串文本{获取;设置;}}

两个答案我都不喜欢。

最初的提问者moncadad,看起来他想要一个单列的DataGrid。他可能只是想在没有大量代码的情况下从ObservableCollection中添加和删除字符串。编辑可能不太重要,因为它可以通过删除和添加来完成。

我自己做了一个可重用的usercontrol,叫做StringListBox。

支持添加和删除字符串的ListBox

基本上这个想法是创建一个DataGrid的标签,一个列表框,一个文本框和一个添加按钮的外观,因为这是一个控件,它必须与ObservableObject或List在一个控件中工作。

这给你添加和删除。我不提供编辑

希望这对下一个家伙有帮助。

实际上它可以工作,你应该使用

Mode=OneWay

我希望这对你有帮助!