【问题标题】:WPF controlling objects on DataGrid new-item row when CanUserAddRows=true当 CanUserAddRows=true 时,WPF 控制 DataGrid 新项目行上的对象
【发布时间】:2012-12-19 01:13:29
【问题描述】:

我正在使用绑定到 ObservableCollection<T> 的 WPF DataGrid,其中每一行(也称为 T 的实例)包含一个浏览和一个删除按钮,它们作为命令绑定到 T 的方法。

问题是我使用CanUserAddRows=true 进行数据输入,并且无法禁用新行的删除按钮(因为尚未实例化 T 的实例)

有人知道解决方法吗?有没有办法控制新项目行上的对象?代码隐藏或通过绑定在这一点上很好 - 我很绝望!

【问题讨论】:

  • 您是否尝试过处理LoadingRow 事件,或者您的情况可能是LoadingRowDetails
  • 感谢您的提示,罗恩。这至少让我开始了。我正在研究如何用我自己的替换新的行占位符模板。它变得非常神秘,我觉得我正在与框架作斗争。使用 DataGrid 真的应该这么难吗?似乎缺少的一块拼图是没有像 WinForms 那样的 DataGrid 设计器。我错过了什么重要的东西吗?
  • 这一定不难,也许,如果你能提供更多关于你想要做什么的细节,我可以提供更多帮助。
  • 你的意思是这样? stackoverflow.com/questions/13757571/… ;-) 但是,是的,我认为这不应该这么难。
  • (对不起,评论系统把我搞砸了)我对问题的理解已经演变为核心问题,即当 CanUserAddRows=true 时,网格控件会创建一个占位符行,由 NewItemTemplate 表示,显然是为“真实”行定义的模板副本。目前,我专注于如何替换我自己的模板,无论是在加载/卸载时的代码中还是使用 XAML。到目前为止,这两种方法都是死胡同。

标签: wpf datagrid


【解决方案1】:

如果我理解正确,您希望将新行中按钮的 IsEnabled 属性设置为 false;

如果 new row 是指尚未编辑的 Row,那么我认为最好先将该按钮的 IsEnabled 属性设置为 false,然后在进行编辑时,将其更改为真实。处理RowEditEnding event

如果不是这种情况,并且您希望能够在将一行添加到数据网格后设置此属性,因为您的数据网格绑定到一个可观察的集合,也许您可​​能希望处理ObservableCollection.CollectionChanged Event

【讨论】:

  • 这是一个有趣的角度。让我玩弄这种方法。谢谢。
  • 两天解决这个问题。 TKS。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多