【问题标题】:Checkbox issues in wpf mvvmwpf mvvm中的复选框问题
【发布时间】:2014-02-16 10:02:00
【问题描述】:

当我使用 WPF 和 MVVM 在 GridView 中使用 CheckBox 时遇到问题。

 <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 值为真?

【问题讨论】:

    标签: c# wpf mvvm checkbox


    【解决方案1】:

    您需要设置一个IEnumerable&lt;bool&gt;/IEnumerable&lt;SomeClass&gt;,其中包含每个CheckBoxes 的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 绑定到此
    <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>
    

    这是在没有 IDE 的情况下完成的,因此您可能需要对其进行调整才能使其正常工作。

    我希望这会有所帮助。

    【讨论】:

    • 先生,那么如何检查特定行是选中还是未选中?即checkbox的值是true还是false?
    • 你可以像CheckedItemCollection[someRowIndex].IsChecked一样查找行...集合应该保持你放置项目的顺序。如果行索引可以通过用户界面更改,那么你必须添加SomeClass 类的索引持有者...
    猜你喜欢
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多