gpt4 book ai didi

xamarin - 通过 MVVM 启用和禁用 Xamarin Forms Switch

转载 作者:行者123 更新时间:2023-12-04 02:44:29 25 4
gpt4 key购买 nike

我有 5 个表单开关,其中一个是 select all,应该选择所有其他 switesh 为 true。 I have a logic when after select all switch is on it cannot be switch back to off manually.关闭按钮(全选)的唯一方法是将另一个按钮更改为 false/Off。

如果我的其他 4 个按钮为真,我已经从 View 模型处理它,我想让用户通过设置逻辑将按钮全选设置为假。但是如果用户可以强制更改并按住 IOS切换到 false 几秒钟按钮停止在 false。我尝试过也给我同样结果的行为即使我可以禁用按钮并启用按钮也很好,但根据 xamarine 文档,无法添加命令

 bool _selectAll;

public bool SelectAll
{
get
{
return _selectAll;
}
set
{
SetProperty(ref _selectAll, value);
if (_activeAll && !(_button1 && _button2 && _button3 && _button4))
{

Button1= true;
Button2= = true;
Button3= = true;
Button4= = true;
}

if (!_selectAll && (_emailStatus && _textStatus && _callStatus && _postStatus))
{
SelectAll= true;
}


}
}

最佳答案

我根据您的要求创建了一个快速示例。

SelectAll 会将所有 4 个选项切换为 True,但用户无法将 SelectAll 开关切换为 False。

我通过禁用 SelectAll 开关并仅在其中一个选项设置为 false 时启用它来完成上述操作。为此,我只是绑定(bind)了 SelectAll 属性的反转值。为了反转我使用了 Converter 的值,但它也可以使用 ViewModel

中的另一个属性来实现

检查这是否适合您。

enter image description here

代码:

View 模型

public class MainViewModel : ViewModelBase
{
private bool option1;
public bool Option1
{
get => option1;
set
{
if (!value) SelectAll = false;
SetProperty(ref option1, value, nameof(Option1));
}
}

private bool option2;
public bool Option2
{
get => option2;
set
{
if (!value) SelectAll = false;
SetProperty(ref option2, value, nameof(Option2));
}
}

private bool option3;
public bool Option3
{
get => option3;
set
{
if (!value) SelectAll = false;
SetProperty(ref option3, value, nameof(Option3));
}
}

private bool option4;
public bool Option4
{
get => option4;
set
{
if (!value) SelectAll = false;
SetProperty(ref option4, value, nameof(Option4));
}
}

private bool selectAll;
public bool SelectAll
{
get => selectAll;
set
{
SetProperty(ref selectAll, value, nameof(SelectAll));

if (value)
{
Option1 = true;
Option2 = true;
Option3 = true;
Option4 = true;
}
}
}

....

}

XAML

<StackLayout Orientation="Vertical"
Padding="20,0"
Spacing="10"
VerticalOptions="CenterAndExpand">

<Switch HorizontalOptions="FillAndExpand"
IsToggled="{Binding Option1}" />

<Switch HorizontalOptions="FillAndExpand"
IsToggled="{Binding Option2}" />

<Switch HorizontalOptions="FillAndExpand"
IsToggled="{Binding Option3}" />

<Switch HorizontalOptions="FillAndExpand"
IsToggled="{Binding Option4}" />

<StackLayout Orientation="Horizontal"
HorizontalOptions="FillAndExpand">
<Switch HorizontalOptions="Start"
IsEnabled="{Binding SelectAll, Converter={StaticResource Invert}}"
IsToggled="{Binding SelectAll}"
VerticalOptions="CenterAndExpand"/>
<Label Text="Select All"
VerticalOptions="CenterAndExpand" />
</StackLayout>
</StackLayout>

但在 XAML 中,您还需要:

<ContentPage.Resources>
<ResourceDictionary>
<local:InvertBooleanConverter x:Key="Invert" />
</ResourceDictionary>
</ContentPage.Resources>

这是转换器注册。

和转换器代码:

public class InvertBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return !(bool)value;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return !(bool)value;
}
}

抱歉,我将 Converter 引入到解决方案中,但我相信这样更干净。有关 Xamarin Forms 转换器的更多信息,请参见 here .

希望这有帮助。-

关于xamarin - 通过 MVVM 启用和禁用 Xamarin Forms Switch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57841074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com