gpt4 book ai didi

wpf - 带有西藏绑定(bind)的MVVMCross WPF值转换器不转换?

转载 作者:行者123 更新时间:2023-12-03 10:17:37 25 4
gpt4 key购买 nike

我正在尝试制作一个采用 bool 的值转换器并返回它的否定。值转换器本身很简单:

namespace MyProject.Core.ValueConverters
{
using System;
using System.Globalization;
using Cirrious.CrossCore.Converters;

public class BoolNegationValueConverter : MvxValueConverter<bool, bool>
{
protected override bool Convert(bool value, Type targetType, object parameter, CultureInfo culture)
{
return !value;
}

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

我想绑定(bind) IsEnabled按钮的属性到 bool使用这个值转换器。我正在使用西藏风格的装订,如 here 所述并已阅读 this wiki page完整,以及观看了 n=4 和 n=35 MVVMCross 视频。我完全按照 Stuart 的解释在 n=35 视频中进行操作,结果是 App.xaml文件如下所示:
<Application
x:Class="MyProject.WPF.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mvx="clr-namespace:mvx;assembly=Cirrious.MvvmCross.BindingEx.Wpf"
xmlns:core="clr-namespace:MyProject.Core;assembly=MyProject.Core"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<mvx:Import
x:Key="ImportCoreProject">
<mvx:Import.From>
<core:ConverterMarker />
</mvx:Import.From>
</mvx:Import>
</ResourceDictionary>
</Application.Resources>
</Application>

类(class) ConverterMarker是空的 public坐在 App.cs 旁边的类(class)在我的核心项目中,如视频中所述。这是我的 View 类中应该使用此转换器的行:
mvx:Bi.nd="Command SetStartingPointCommand; IsEnabled BoolNegation(UseDefaultStartingPoint)"/>

我想也许在启动时注册这个值转换器有问题,所以我尝试添加这个:
 protected override void FillValueConverters (IMvxValueConverterRegistry registry)
{
registry.AddOrOverwrite("BoolNegation", new BoolNegationValueConverter());
}

致我的 Setup类,如值转换器 wiki 页面中所述,但它告诉我 there is no suitable method to override .

如果有人可以在这里帮助我,我将不胜感激。如果有帮助,无论 UseDefaultStartingPoint 的值是多少,无论发生什么都会使按钮永久禁用。是。一切都构建并运行,但按钮始终处于禁用状态。

先感谢您!

最佳答案

debug输出告诉我它 failed to find combiner or converter for BoolNegation .我在 MvxWpfSetup 的源代码中注意到了它不包含任何一个

protected virtual void RegisterBindingBuilderCallbacks() 

也不
protected virtual void FillValueConverters(IMvxValueConverterRegistry registry)

喜欢 MvxAndroidSetup类可以,所以这些方法都不能在我的 Setup.cs 中被覆盖类(class)。所以我所做的就是添加
    protected void RegisterBindingbuilderCallbacks()
{
Mvx.CallbackWhenRegistered<IMvxValueConverterRegistry>(this.FillValueConverters);
}

protected void FillValueConverters(IMvxValueConverterRegistry registry)
{
registry.AddOrOverwrite("BoolNegation", new BoolNegationValueConverter());
}

Setup.cs还编辑了 InitializeLastChance()像这样:
protected override void InitializeLastChance()
{
base.InitializeLastChance();

var builder = new MvxWindowsBindingBuilder();
this.RegisterBindingbuilderCallbacks();
builder.DoRegistration();
}

一切都解决了。我将不得不手动将我想要的每个转换器添加到 FillValueConverters()方法,但这会起作用,我检查了。

关于wpf - 带有西藏绑定(bind)的MVVMCross WPF值转换器不转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30488732/

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