【发布时间】:2019-06-02 22:37:44
【问题描述】:
我有一个与可观察集合链接的数据网格。 他们有大量我必须操作的列/属性。 我需要通过组合框对用户在运行时选择的列进行字符串替换。 所以我首先要做的是找出列的索引(在我们的例子中Description index=2从0开始),然后用下面的代码操作替换。变量iii表示当前行
DataGridRow row = (DataGridRow)dtgFeatures.ItemContainerGenerator.ContainerFromIndex(iii);
if (row != null)
{
var content = dtgFeatures.Columns[indexColumnToOperateOn].GetCellContent(row);
if (content != null)
{
string str = ((TextBlock)content).Text;
if (str.ToUpper().Trim().Contains(tbxSrc.Text.ToUpper().Trim()))
{
((TextBlock)content).Text = str.Replace(tbxSrc.Text, tbxDest.Text);
obcCfgPartPrograms = (ObservableCollection < CfgPartPrograms >) dtgFeatures.ItemsSource;
}
}
}
在我们的示例中,我们可以将字符串“pccad”更改为“AAA”
这样“以图形方式”工作,但 observable 集合不会使用命令 obcCfgPartPrograms = (ObservableCollection ) dtgFeatures.ItemsSource; 进行回更新;
我知道我可以通过每个属性来做到这一点,但这对于
--编辑-- 对不起,我看到我没有说清楚。我的错。
所以我有很多属性(这里有 9 个,但可能更多),所以我不会写这样的东西:
if(comboBoxValue="Description")
obc.Description = dtgFeatures[2,row];
else if(comboBoxValue="Notes")
obc.Description = dtgFeatures[4,row];
...
因为我可以手动编辑数据网格并将更改反映在可观察集合上
datagrid MANUAL EDIT ---> 可观察集合的变化
为什么不能以编程方式(例如使用字符串比较)编辑数据网格并在 obc 上反映更改?
datagrid 自动编辑 ---> 可观察集合的变化
简而言之: 1. 我能够更改数据网格 --> dtgFeatures[property_X,row_Y] = "AAAAAA"; 2.我希望能够自动改变obc[Y].X = "AAAAAA";
数量非常多。
感谢您的帮助 帕特里克
【问题讨论】:
-
是否首先使用 MVVM?另外,为什么要更改 UI 元素而不是更改 ObservableCollection 并触发 OnPropertyChanged 事件?
-
没有 MVVM 很抱歉。至于其余的请看我的编辑
-
如果您可以以编程方式编辑 DataGrid,为什么不能以编程方式对 ObservableCollection 执行相同操作?
-
因为可以使用索引和坐标访问数据网格 --> datagrid.Cell[x,y]。我不知道用 observable 集合做同样的方法 --> obc[member x, line j]
标签: c# wpf properties datagrid observablecollection