【发布时间】:2020-02-28 18:00:09
【问题描述】:
我已经尝试了无数种方法到星期天来让它工作,但我显然缺少一些东西,因为我的“Register”按钮不是无论我做什么都会启用。
在我的 XAML 中:
<Button Text="Register"
Style="{StaticResource RegularButtonStyle}"
WidthRequest="280"
x:Name="RegisterButton">
<!-- I HAD the following, but it wasn't working so I finally decided to try DataTriggers -->
<!-- bindings:Bi.nd="Clicked RegisterButtonClickedCommand;IsEnabled IsRegisterButtonEnabled"> -->
<Button.Triggers>
<DataTrigger TargetType="Button"
Binding="{Binding IsRegisterButtonEnabled}"
Value="False">
<Setter Property="IsEnabled" Value="False"></Setter>
</DataTrigger>
<DataTrigger TargetType="Button"
Binding="{Binding IsRegisterButtonEnabled}"
Value="True">
<Setter Property="IsEnabled" Value="True"></Setter>
</DataTrigger>
</Button.Triggers>
</Button>
在 ViewModel 中:
public class RegisterViewModel : MvxViewModel
{
...
private bool _isRegisterButtonEnabled;
public bool IsRegisterButtonEnabled
{
get => ShouldEnableRegisterButton();
set
{
_isRegisterButtonEnabled = value;
SetProperty(ref _isRegisterButtonEnabled, value);
}
}
...
public IMvxCommand RegisterButtonClickedCommand { get; private set; }
...
private void InitializeCommands()
{
...
RegisterButtonClickedCommand = new MvxCommand(RegisterUser);
}
...
private bool ShouldEnableRegisterButton()
{
var isValidUser = _userName.Validate();
var isValidPass = _password.Validate();
var isValidConfirmedPass = _confirmedPassword.Validate();
var shouldEnable = isValidUser && isValidPass && isValidConfirmedPass;
_mvxLogger.Log(MvxLogLevel.Trace, () => $"RegisterViewModel : ShouldEnableRegisterButton() called. Returning: {shouldEnable}");
return shouldEnable;
}
...
}
我已经阅读了 MvvmCross“文档”,但它都是对话式的,我找不到任何特定的绑定到按钮的 IsEnabled 属性的示例,并且具有足够的特异性让我到达那里。
当然会感谢一些帮助。 :)
家政信息: 我正在使用以下 NuGet 包 (/libraries)- MvvmCross & MvvmCross.Forms v6.3.1
- Xamarin.Forms v4.0.0.497661
- Xamarin.Android.* 库都是 v28.0.0.1
- MvvmCross & MvvmCross.Forms v6.4.1
- Xamarin.Forms v4.2.0.848062
- Xamarin.Android.* 库现在都是 v28.0.0.3
还使用 .Net Standard v2.0.3 来共享内容。
【问题讨论】:
-
首先,是否需要触发器?您不能直接将 IsEnabled 绑定到您的 VM 属性吗?其次,我没有看到任何实际设置 IsRegisterButtonEnabled
-
@Jason 我试过了。这就是那些以
<!-- I HAD the following,...开头的 [在 XAML 中] 的 cmets 的意思。 -
好的,但是我没有看到任何设置 IsRegisterButtonEnabled 的地方?
-
@Jason Oi,你是绝对正确的!虽然我的问题结果是多种因素的结合,但这绝对是其中之一。
标签: android ios xamarin.forms mvvmcross