将ObservableCollection <string>双向绑定到WPF DataGrid </string>

时间:2011-04-30 09:23:22

标签: c# wpf xaml data-binding mvvm

我一直在关注这个问题/阅读这个问题已有一段时间了,还没有找到答案。希望你们能帮忙。

我有一个类型字符串的observablecollection。我想将此集合绑定到数据网格,并能够编辑/删除/添加到集合。这是我的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方法(上面)编辑集合,并查看列表框中的更改/编辑。删除/添加工作正常,但是当我在网格单元格内编辑一个字符串并且它失去焦点时,该字符串将恢复到原来的状态,并且永远不会更新。

非常感谢任何帮助/建议。

2 个答案:

答案 0 :(得分:3)

哇,昨天我去了这个,并且遇到了一个DataGrid,它会为我的ObservableCollection添加一个新行。经过研究,我意识到了原因。字符串和不可变。

我发现了这个问题,遗憾的是它没有答案。所以我不能把这个答案留空。

以下是我找到的答案:

  1. DataGrid无法通过添加,编辑或删除字符串来更新字符串集合。

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

    public class StringWrapper {     public string Text {get;组; } }

  3. 我不喜欢回答。

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

    我最终使用一个名为StringListBox的可重用用户控件自己做了这个。

    A ListBox for strings that supports add and delete

    基本上,我们的想法是使用Label,ListBox,TextBox和Add按钮创建DataGrid的外观,因为这是一个控件,它必须在一个控件中使用ObservableObject或List。

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

    希望这有助于下一个人。

答案 1 :(得分:0)

实际上它可行,你应该只使用

Mode=OneWay

在您的装订中。

我希望这有帮助!

相关问题