C# wpf mvvm中的复选框问题

C# wpf mvvm中的复选框问题,c#,wpf,mvvm,checkbox,C#,Wpf,Mvvm,Checkbox,当我在GridView中使用WPF和MVVM时,我遇到了问题 <GridViewColumn.CellTemplate> <DataTemplate> <CheckBox IsChecked="{Binding IsSelected}"/> </DataTemplate> </GridViewColumn.CellTemp

当我在
GridView
中使用WPF和MVVM时,我遇到了问题

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

如何选择所选行中的数据,即该行的
复选框
值是否为真?

您需要设置一个
IEnumerable
/
IEnumerable
,用于保存每个
复选框
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");
    }
}
这是在没有IDE的情况下完成的,因此您可能需要对其进行调整以使其正常工作


我希望这有帮助。

先生,那么如何检查特定行是选中还是未选中?也就是说,复选框的值是真还是假?您可以像
CheckedItemCollection[someRowIndex]一样查找该行。IsChecked
。。。集合应保持您放置项目的顺序。如果行索引可以通过UI更改,那么您必须向
SomeClass
类添加索引持有者。。。
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");
    }
}
<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>