2012-10-22 184 views
1

我的DataGrid的SelectedItem綁定到下面的屬性。WPF DataGrid設置將SelectedItem屬性綁定爲null不起作用

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的ItemsSource綁定到

public ICollectionView VisibleOrderItems { get; set; } 

爲什麼我要到的SelectedItem重置程序的原因,是因爲這是一個觸摸屏的應用程序,而當他們選擇項目,我希望它改變視圖,然後當他們回到帶有datagrid的視圖時,我不想要一個項目被選中。

我試圖創建一個單獨的功能,只是送走的SelectedItem,並調用,當單獨查看結束,還試圖variuous綁定設置.... UpdateSourceTrigger =的PropertyChanged,模式=雙向,IsSynchronizedWithCurrentItem

無法包裹我的頭爲什麼這不起作用。

數據網格顯示爲高亮顯示的行,但是當我點擊該行這臺_selectedItem(_selectedItem != value

+0

在「OnPropertyChanged」方法中執行任何空檢查?如果可能的話,請在OnPropertyChanged方法中提供代碼。 – Bathineni

回答

1

你試過設置VisibleOrderItems.CurrentItem = NULL?

另外,當前項目和選定項目之間存在差異,當前是佔用ICollectionView中CurrentItem屬性的項目,而SelectedItems是當前通過任何方式選擇的所有項目的集合。當前項目不需要被選擇。

+0

CurrentItem似乎只讀 –

+0

我通常使用ListCollectionView和view.MoveCurrentTo(null)似乎爲我工作。 –

+0

很好的建議,但它沒有爲我工作 –

0
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塊的末尾。

+0

真的和我的代碼沒有區別。設置SelectedItem = null將再次執行設置器中的OnPropertyChanged –

0

在我的一個項目中,我遇到了和你一樣的問題,因爲我和你做了非常黑客的解決方案。 在XML - NotifyOnSourceUpdated=True是很重要的!:

 <DataGrid ItemsSource="{Binding Items}" 
SelectedItem="{Binding SelectedItem, Mode=TwoWay, NotifyOnSourceUpdated=True}"> 

在視圖模型屬性應該像代碼波紋管。請注意,代碼不包含您的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"); 
      }    
     } 
    } 
+0

同時http://stackoverflow.com/questions/857116/change-value-in-setter-property-when-using-wpf-two-way-databinding接縫像有效方法來做同樣的事情,但然後你必須通過datagrid實例viewmodel這是不好的... – Igor

相關問題