我在许多帖子上搜索过,但我找不到任何可以解决问题的方法,而且我真的不知道应该使用哪些关键字。我有一个由DataSet填充的DataGrid,其中包含我手动指定的列。
在我的专栏中,' Total',Binding由以下设置:
<DataGridTextColumn Header="Total"
Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type UserControl}},
Path=DataContext.Total}"
Total属性不在DataSet中,它绑定到我的DataGrid,这就是我使用这种Binding的原因。
问题在于,当我在&#39; Total&#39;中设置一个值时,就像任何用户一样,在我的列的每个单元格中重复此值。 < / p>
所以,我知道这是因为这个属性,因为每次我更改单元格的值时,Total属性都会获得这个新值并将其发送回我的列。我可以使用使用所选行的数字或条件的条件,我对我应该做的事情有一些想法,但我不能在我的Xaml代码中这样做。
我尝试在代码后面创建一个Binding(),但它并没有真正起作用,我不确定它是否会改变任何东西。
在这种情况下,有没有办法在每行使用一个值?
谢谢!
答案 0 :(得分:0)
所以,正如Lee O.亲切地说,我首先决定通过在里面添加一个新列和一些数据来改变我的DataSet。问题是我找不到任何方法在我的设计器代码中第二列成功绑定。
无论如何,我知道这不是最好的方法,因为我有点阻止自己修改大的东西以避免我的代码中的大问题和其他一些原因,所以我花了一整天时间让它更好地工作。我认为它不会花太多时间来修改它,但它终于奏效了。
解决方案是创建(或改变我的情况)一个类,它代表DataGrid中的一行,具有您需要的任意数量的属性,包括您可能想要拥有的每个列。然后,在ViewModel中创建一个ObservableCollection(我真的很喜欢这种类型的列表,非常有用且易于使用/更新)。
最后,将您的列绑定到MainWindow中类中的属性,如下所示:
// new ViewModel() + ObservableCollection<Class>
this.gridCameras.ItemsSource = viewModel.OCCameras;
this.Total.Binding = new Binding("Total");
如果它也可以帮助某人,我找到了一些东西将这个类正确绑定到DataGrid中的ComboBox,这有点复杂,here和here因为我认为你的ComboBox应该写得那样(不要忘记在foreach循环中使用的x:Name属性):
<DataGridTemplateColumn Header="Fps" Width="80" x:Name="Fps">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="cbFps"
Foreground="Black"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
我强烈建议你在你的类中添加一个Index属性,因为当我编辑一个单元格/行和其他一些东西时,我用它来识别我的ObservableCollection中的对象。这比在每次需要时找到元素之前循环列表要好得多。
希望它有所帮助并随意提出您可能遇到的任何问题。我不是说我使用了世界上最好的方式,但它对我有用,这就是我想要的。
再次感谢您的提示Lee O.