【发布时间】: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