我的dataGrid的selectionItem绑定到下面的属性。
public OrderItemViewModel SelectedItem
{
get { return _selectedItem; }
set
{
if (_selectedItem != value)
{
_selectedItem = value;
OnPropertyChanged(() => SelectedItem);
if (_selectedItem != null && _isReturnMode)
{
if (_selectedItem.OrderItemModel.ProductDetails.IsConstructed)
{
VisiblePaymentViewModel = new ViewReturnComponentsViewModel(this, value.OrderItemModel.ProductDetails);
}
else
{
VisiblePaymentViewModel = new EditReturnItemViewModel(this, value);
}
SelectedItem = null;
}
}
}
}
DataGrid的项目源与
约束public ICollectionView VisibleOrderItems { get; set; }
我要重置程序中的SelectedItem的原因,是因为这是一个触摸屏应用程序,当他们选择项目时,我希望它更改视图,然后当他们回到视图中时我不希望选择项目的数据杂志。
我已经尝试创建一个单独的函数,该功能仅清除了SelectedItem,并在单独的视图完成后称为" updateSourCetrigger"。>
无法缠绕我的头为什么不起作用。
datagrid显示了该行的突出显示,但是当我单击该行时,它将设置_selectedItem(_selectedItem != value
)
您是否尝试过设置visibleOrderItems.currentitem = null?
另外,当前项目和选定的项目之间存在差异,当前项目是占据IcollectionView中currentItem属性的当前项目,而SelectelSectionItems是当前按任何方法选择的所有项目的集合。当前项目不必选择。
if (_selectedItem != value)
{
_selectedItem = value;
if (_selectedItem != null && _isReturnMode)
{
if (_selectedItem.OrderItemModel.ProductDetails.IsConstructed)
{
VisiblePaymentViewModel = new ViewReturnComponentsViewModel(this, value.OrderItemModel.ProductDetails);
}
else
{
VisiblePaymentViewModel = new EditReturnItemViewModel(this, value);
}
SelectedItem = null;
}
OnPropertyChanged(() => SelectedItem);
}
将通知设置为if block的末尾。
在一个我的项目中,我和您的问题完全相同,我和我做了非常简短的解决方案。在XML -NotifyOnSourceUpdated=True
中很重要!:
<DataGrid ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedItem, Mode=TwoWay, NotifyOnSourceUpdated=True}">
在ViewModel中,属性应该看起来像代码Bellow。请注意,代码不包含您的if条件,但我确定它足够清楚:
public TestModel SelectedItem
{
get { return selectedItem; }
set
{
selectedItem = value;
if (selectedItem != null)
{
//.....do something with selected item
//actual hack, execute SelectedItem = null async on UI thread
System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke((ThreadStart)(() =>
{
SelectedItem = null;
}));
}
else
{
OnPropertyChanged("SelectedItem");
}
}
}