【发布时间】:2014-02-18 04:33:32
【问题描述】:
我有一个DataGrid,其ItemsSource 绑定到ViewModel 的ObservableCollection(of MY_TYPE) 类型的属性。另外,在 ViewModel 中,我还有一个名为 SelectedTarget 的属性,它绑定到 DataGrid 的 SelectedItem (类型当然是 MY_TYPE )。
现在我想要实现的是:用户可以将光标移动到另一行,前提是前一行(SelectedTarget)没有任何更改,否则他必须首先保存这些更改。但我不知道该怎么做。
感谢您的帮助!
更新
这是我的 xaml 代码和 ViewModel 属性,就像 Sheridan 建议的那样。
xaml
<DataGrid Grid.Column="1" x:Name="ItemsGrid" ItemsSource="{Binding MyItems}" SelectionMode="Single" AutoGenerateColumns="False"
CanUserResizeRows="False" CanUserSortColumns="True" IsReadOnly="True" VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Standard" EnableRowVirtualization="True"
SelectedItem="{Binding SelectedTarget, Mode=TwoWay}"
SelectionUnit="FullRow">
以及 ViewModel 中的属性:
Public Property SelectedTarget As MY_TYPE
Get
Return _selectedTarget
End Get
Set(value As MY_TYPE)
If _selectedTarget Is Nothing OrElse (_selectedTarget.Status <> Status.Editing AndAlso _selectedTarget.Status <> Status.New) Then
_selectedTarget = value
RaisePropertyChanged("SelectedTarget")
End If
End Set
End Property
Private _selectedTarget As MY_TYPE
我已经检查过,当SelectedTarget 的Status 正在编辑时,它不会改变SelectedTarget 本身。但是,这并不能阻止另一行中的值被更改。无论如何,光标都会移动到另一行,但我不确定这是否意味着我的 SelectedItem 绑定无法正常工作。另一方面,如果我根本没有在DataGrid 中设置SelectedItem 的绑定,即使我不保存第一行中的更改,第二行中的值仍然会发生变化。这有点道理,因为每一行本质上都绑定到一个项目。
【问题讨论】:
-
你可以绑定到一个标志(布尔)
-
@WiiMaxx 你能给我更多细节吗?在 MY_TYPE 类中,我确实有一个 Enum 标志来指示状态(有效、编辑和新建),但我想不出在这种情况下使用它的方式。我有点感觉这应该很简单
-
我现在编辑了我的答案,它应该适合您的需要;)