双向绑定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也被绑定到一个列表框。我希望能够使用数据网格方法(上面)编辑集合,并在列表框中查看更改/编辑。删除/添加工作正常,但当我编辑一个网格单元格内的字符串,它失去焦点,字符串回到它原来是什么,从来没有得到更新。
非常感谢您的帮助/建议。
哇,我昨天去做这个,被一个DataGrid卡住了,它会为我的ObservableCollection添加一个新行。经过研究,我明白了原因。字符串和不可变。
我发现了这个问题,不幸的是它没有答案。所以我不能留下一个空的答案。
所以这里是我找到的答案:
-
DataGrid不能通过添加、编辑或删除字符串来更新字符串集合。
-
我找到了一个解决方案,将字符串包装在StringWrapper对象中。
公共类StringWrapper{公共字符串文本{获取;设置;}}
两个答案我都不喜欢。
最初的提问者moncadad,看起来他想要一个单列的DataGrid。他可能只是想在没有大量代码的情况下从ObservableCollection中添加和删除字符串。编辑可能不太重要,因为它可以通过删除和添加来完成。
我自己做了一个可重用的usercontrol,叫做StringListBox。
支持添加和删除字符串的ListBox
基本上这个想法是创建一个DataGrid的标签,一个列表框,一个文本框和一个添加按钮的外观,因为这是一个控件,它必须与ObservableObject或List在一个控件中工作。
这给你添加和删除。我不提供编辑
希望这对下一个家伙有帮助。
实际上它可以工作,你应该使用
Mode=OneWay
我希望这对你有帮助!