【问题标题】:wpf grid control for adding dynamic data用于添加动态数据的 wpf 网格控件
【发布时间】:2013-10-25 17:13:54
【问题描述】:

如果我希望用户能够输入 Cross Ccy 数量,我需要什么 WPF 控件,即每行所需的数据是

Ccy 1,Ccy 2,金额

我想要一个类似网格的控件,用户可以在其中为行中的每个单元格输入数据,一旦您开始在单元格中输入数据,就会在下面添加一个新行,因此控件会随着用户的每个输入而不断增长输入并且没有上限,但会增长以适应,当它超出网格容器的边界时使用滚动条。

是否有内置控件来执行此操作?还是我必须向 listview/datagrid 添加功能?

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    这是数据网格的标准行为,如果属性 CanUserAddRows 设置为 True

    【讨论】:

      【解决方案2】:

      如果您希望用户能够添加新行,只需将 DataGrid 上的 CanUserAddRows 属性设置为 true。

      <DataGrid CanUserAddRows="True" ..../>
      

      如果您希望在用户编辑现有行的单元格中的数据时添加行,您可以注册到其中一个单元格编辑事件(取决于您希望何时添加新行)并将行添加到网格或项目绑定到它的集合。

      datagrid.CellEditEnding += (grid, args) =>
      {
            datagrid.Items.Add( ....);
      };
      

      【讨论】:

      • 非常感谢。我现在已经开始工作了,尽管我想要将数据网格的每一行绑定到一个 ViewModel 对象,称之为 CcyCorrelationViewModel。我已将 ItemsSource 绑定到 CcyCorrelationViewModel 类型的可观察集合,但是当您添加一行时,文本会在您关闭它时从每个单元格中清除,并且您最终会得到一个空白的第一行,即使添加了第二行,并且底层的 VM 对象不会在其中获取任何数据。如何将网格的每一列绑定到视图模型中的属性?
      • @user1122909 据我了解,CcyCorrelationModel,而不是 ViewModel。所以你的ViewModel 中应该有一个CcyCorrelation 类型的ObservableCollection。现在,将网格中的列绑定到CcyCorrelation 的属性非常简单。假设CcyCorrelation 类包含一个名为Amount 的属性,只需将列绑定到该属性&lt;DataGridTextColumn Binding="{Binding Amount}"/&gt;。如果您在使用代码编辑问题时遇到困难,我们会尽力帮助您:)
      • 谢谢,太好了。关于模型/虚拟机的好点,我想我已经养成了将所有东西都称为 ViewModel 的习惯,而实际上它们只是模型。认为我需要做更多阅读以阐明最佳设计实践
      猜你喜欢
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 2016-05-12
      • 2017-05-12
      相关资源
      最近更新 更多