C# 如何在MVVM中隐藏复选框的代码?

C# 如何在MVVM中隐藏复选框的代码?,c#,xaml,xamarin,xamarin.forms,xamarin.android,C#,Xaml,Xamarin,Xamarin.forms,Xamarin.android,我有一个复选框的代码。请告诉我如何在MVVM中编写它? 有一个函数,我只能选择一个复选框。一般来说,我知道我必须编写命令 XAML: 视图模型 public class MainPageViewModel { public List<Model> Items { set; get; } public MainPageViewModel() { Lis

我有一个复选框的代码。请告诉我如何在MVVM中编写它? 有一个函数,我只能选择一个复选框。一般来说,我知道我必须编写命令

XAML:

视图模型

        public class MainPageViewModel
        {
            public List<Model> Items { set; get; }
            public MainPageViewModel()
            {
                List<Model> list = new List<Model>();
                for (int i=0; i<10; i++)
                {
                    list.Add(new Model { IsSelected = false });
                }
                Items = list;
            }
        }

对于要命令的事件,请使用Corcav.Behavior nuget

。。。
xmlns:corcav=“clr命名空间:corcav.Behaviors;assembly=corcav.Behaviors”
...
在ViewModel中添加此命令并编写逻辑

public ICommand CheckBoxChangedCommand{ get; set; }
...
CheckBoxChangedCommand= new Command<object>(CheckBoxChanged);
...
private void CheckBoxChanged(object obj)
        {
    //set all list/collection element to false with linq
            if(obj is Model model)
            {
                model.IsSelected = true;
            }
        }
public ICommand CheckBoxChangedCommand{get;set;}
...
CheckBoxChangedCommand=新命令(CheckBoxChanged);
...
私有无效复选框已更改(对象obj)
{
//使用linq将所有列表/集合元素设置为false
if(obj为模型)
{
model.IsSelected=true;
}
}

对于要命令的事件,请使用Corcav.Behavior nuget

。。。
xmlns:corcav=“clr命名空间:corcav.Behaviors;assembly=corcav.Behaviors”
...
在ViewModel中添加此命令并编写逻辑

public ICommand CheckBoxChangedCommand{ get; set; }
...
CheckBoxChangedCommand= new Command<object>(CheckBoxChanged);
...
private void CheckBoxChanged(object obj)
        {
    //set all list/collection element to false with linq
            if(obj is Model model)
            {
                model.IsSelected = true;
            }
        }
public ICommand CheckBoxChangedCommand{get;set;}
...
CheckBoxChangedCommand=新命令(CheckBoxChanged);
...
私有无效复选框已更改(对象obj)
{
//使用linq将所有列表/集合元素设置为false
if(obj为模型)
{
model.IsSelected=true;
}
}

目前,复选框不支持命令。此问题已在Github上报告,尚未修复。我们可以跟踪此增强

您可以使用
InputKit
。在NuGet上安装
Xamarin.Forms.InputKit
。 它提供了
CheckChangedCommand

CheckChangedCommand:(命令)可绑定命令,在check更改时执行

 <input:CheckBox  HorizontalOptions="Start" Color="Black" CheckChangedCommand="{Binding CheckBoxChangedCommand}">

目前,复选框不支持命令。此问题已在Github上报告,尚未修复。我们可以跟踪此增强

您可以使用
InputKit
。在NuGet上安装
Xamarin.Forms.InputKit
。 它提供了
CheckChangedCommand

CheckChangedCommand:(命令)可绑定命令,在check更改时执行

 <input:CheckBox  HorizontalOptions="Start" Color="Black" CheckChangedCommand="{Binding CheckBoxChangedCommand}">


这可能就是您要找的。请看一下如何使用。它以可重用的方式将CheckedChanged事件等事件转换为可从viewmodel连接到的命令。您应该将类型为
Model
SelectedItem
属性添加到
MainPageViewModel
并绑定到
ListView。在VM中更改此属性时选择EdItem
(在setter中)您应该取消设置以前设置的
IsSelected
(在setter中,这将是您为VM fx
SelectedItem
存储
SelectedItem
)的私有字段,并设置当前(
value.IsSelected
)和设置值(
SelectedItem=value
),然后提前调用PropChange。。。就是这样,这可能就是你想要的。看看如何使用。它以可重用的方式将CheckedChanged事件等事件转换为可从viewmodel连接到的命令。您应该将类型为
Model
SelectedItem
属性添加到
MainPageViewModel
并绑定到
ListView。在VM中更改此属性时选择EdItem
(在setter中)您应该取消设置以前设置的
IsSelected
(在setter中,这将是您为VM fx
SelectedItem
存储
SelectedItem
)的私有字段,并设置当前(
value.IsSelected
)和设置值(
SelectedItem=value
),然后提前调用PropChange。。。这是itI的错误XLS0413在类型“EventToCommand”上找不到属性“Commandparameter”。如果我写的时候没有Commandparameter,那么我有一个错误,那就是没有可用的命令。你可以制作一个我可以查看的git repo示例吗。如果我写的时候没有Commandparameter,那么我就有一个错误,就是没有可用的Commandparameter。你能做一个我可以查看的git repo示例吗
public ICommand CheckBoxChangedCommand{ get; set; }
...
CheckBoxChangedCommand= new Command<object>(CheckBoxChanged);
...
private void CheckBoxChanged(object obj)
        {
    //set all list/collection element to false with linq
            if(obj is Model model)
            {
                model.IsSelected = true;
            }
        }
 <input:CheckBox  HorizontalOptions="Start" Color="Black" CheckChangedCommand="{Binding CheckBoxChangedCommand}">