WPF DataGrid设置将SelectedItem属性限制为NULL不起作用



我的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");
             }               
        }
    }

最新更新