【问题标题】:Data binding to Switch数据绑定到 Switch
【发布时间】:2022-11-01 11:18:13
【问题描述】:

我正在尝试根据在 Switch 上打开的内容来更改 bool。方法在 xaml.cs 中有效,但我想在 ViewModel 中执行此操作。有可能吗?如果是,我该怎么办?

混帐:https://github.com/wojblaz/Clicer-Game---final/commits/master/Clicer%20Game

在 ViewModel 我得到一个错误:“ClassicMode.ModeSelector”因其保护级别而无法访问。

(模式选择器是开关的名称) 如果没有 ClassicMode(它是视图的名称),也会发生同样的情况。

视图(Xaml) - 经典模式:

x:Type 定义好了吗? `

        <Switch
            x:Name="ModeSelector"
            IsToggled="False"
            Toggled="{Binding Source={RelativeSource AncestorType={x:Type viewmodels:ClassicModelViewModel}}, Path=BindingContext.ModeSelector_ToggledCommand}"
            Grid.Row="1"
            Grid.Column="0"
            HorizontalOptions="Center"/>

`

Xaml.cs - BindingContext `

using Clicer_Game.ViewModels;
using CommunityToolkit.Mvvm.Input;


namespace Clicer_Game.Views;

public partial class ClassicMode : ContentPage
{
    public ClassicMode()
    {
        InitializeComponent();
        BindingContext = new ClassicModelViewModel();
    }

}

`

视图模型

`


    private bool IsTime;

        [RelayCommand]
        private void ModeSelector_Toggled()
        {
            if (ClassicMode.ModeSelector.IsToggled)
            {
                IsTime = false;
            }
            else
            {
                IsTime = true;
            }
        }

`

我应该在 ModeSelector_Toggled 方法中使用什么参数?

【问题讨论】:

  • 无法从 ViewModel 直接访问 View 的 UI 元素。使用 MVVM 和数据绑定。 (您正在尝试编写 maui 代码,但没有学习基础知识。我建议您花几天时间关注文档、教程和 youtube 视频。在尝试编写自己的代码之前下载工作代码并对其进行修改。我知道这有点目前具有挑战性;毛伊岛材料仍然供不应求。有时,Xamarin Forms 材料会对高级主题有所帮助。但首先要了解毛伊岛的基础知识。)

标签: data-binding parameters binding switch-statement .net-maui


【解决方案1】:

您可以查看此link。它详细讲述了Inaccessible due to its protection level。选择 ModeSelector 并按 F12,您应该会看到:

private global::Microsoft.Maui.Controls.Switch ModeSelector;

访问级别为private

方法一:您可以在代码中创建一个 Switch,并检查此official code。记得将 Switch 的访问级别设为public

方法二:直接在MainPage.xaml.cs文件中写相关代码:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void Switch_Toggled(object sender, ToggledEventArgs e)
    {
      if (ModeSelector.IsToggled)
            {
                IsTime = false;
            }
            else
            {
                IsTime = true;
            }
    }
}

视图模型:

pubulic static bool IsTime;

【讨论】:

    猜你喜欢
    • 2016-09-13
    • 1970-01-01
    • 2023-03-19
    • 2011-04-05
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多