2014-01-25 55 views
4

當我在使用WPF和MVVM的GridView中使用CheckBox時遇到問題。wpf mvvm中的複選框問題

<GridViewColumn.CellTemplate> 
        <DataTemplate> 
        <CheckBox IsChecked="{Binding IsSelected}"/> 
        </DataTemplate> 
    </GridViewColumn.CellTemplate> 

我的視圖模型

public bool IsSelected 
    { 
     get 
     { 
      return _isSelected; 
     } 
     set 
     { 
      if (_isSelected == value) 
      { 
       return; 
      } 
      _isSelected = value; 
      OnPropertyChanged("IsSelected"); 
     } 
    } 

如何選擇所選行的數據,即該行的CheckBox值是真的嗎?

回答

3

您需要設置一個IEnumerable<bool>/IEnumerable<SomeClass>,其中包含您的每個CheckBox es的IsChecked信息。像

public class CheckedItem 
{ 
    public CheckedItem() { } 

    public CheckedItem(string text, bool isChecked) : this() 
    { 
     this._text = text; 
     this._isChecked = isChecked; 
    } 

    private string _text; 
    public String Text; 
    { 
     get { return _text; } 
     set 
     { 
      if (_text == value) 
       return; 
      _text = value; 
      OnPropertyChanged("IsSelected"); 
     } 
    } 

    private bool _isSelected; 
    public bool IsSelected; 
    { 
     get { return _isSelected; } 
     set 
     { 
      if (_isSelected == value) 
       return; 
      _isSelected = value; 
      OnPropertyChanged("IsSelected"); 
     } 
    } 
} 

private ObservableCollection<CheckedItem> checkItemCollection = 
    new ObservableCollection<CheckedItem>(); 
public ObservableCollection<CheckedItem> CheckItemCollection 
{ 
    get { return checkItemCollection; } 
    set 
    { 
     if (checkItemCollection == value) 
      return; 
     checkItemCollection = value; 
     OnPropertyChanged("CheckItemCollection"); 
    } 
} 

東西在XAML可以再使用

<GridView ItemsSource="{Binding Path=CheckedItemCollection, 
           Mode=TwoWay, 
           UpdateSourceTrigger=PropertyChanged, 
           IsAsync=True}" 
    <GridView.Columns> 
     <GridViewColumn.CellTemplate> 
      <DataTemplate> 
       <CheckBox Content="{Binding Text}" 
          IsChecked="{Binding IsSelected, 
               Mode=TwoWay, 
               UpdateSourceTrigger=PropertyChanged, 
               IsAsync=True}"/> 
      </DataTemplate> 
     </GridViewColumn.CellTemplate> 
    </GridView.Columns> 
</GridView> 

此綁定GridView這個沒有一個IDE做,所以你可能需要調整這讓它開始工作。

我希望這會有所幫助。

+0

先生,那麼如何檢查某一行是否被選中或取消選中?即複選框的值是真還是假? – Jinesh

+1

你可以像查找行一樣查看'CheckedItemCollection [someRowIndex] .IsChecked' ...集合應該保持您放置項目的順序。它的行索引可以通過UI進行更改,那麼您將不得不添加索引持有者到「SomeClass」類... – MoonKnight