2014-01-25 57 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