具有西藏绑定的MVVMCross WPF值转换器未转换?

具有西藏绑定的MVVMCross WPF值转换器未转换?,wpf,xaml,mvvm,mvvmcross,valueconverter,Wpf,Xaml,Mvvm,Mvvmcross,Valueconverter,我试图制作一个值转换器,它接受一个bool,并返回它的求反。值转换器本身很简单: namespace MyProject.Core.ValueConverters { using System; using System.Globalization; using Cirrious.CrossCore.Converters; public class BoolNegationValueConverter : MvxValueConverter<bool, bool> { pr

我试图制作一个值转换器,它接受一个
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;
    }
}
}
在我的核心项目中,
ConverterMarker
类是一个空的
public
类,位于
App.cs
旁边,如视频中所述。以下是my view类中应使用此转换器的行:

mvx:Bi.nd="Command SetStartingPointCommand; IsEnabled BoolNegation(UseDefaultStartingPoint)"/>
我想在启动时注册此值转换器可能有问题,因此我尝试添加以下内容:

 protected override void FillValueConverters (IMvxValueConverterRegistry registry)
 {
     registry.AddOrOverwrite("BoolNegation", new BoolNegationValueConverter());
 }
到我的
设置
类,如值转换器wiki页面中所述,但它告诉我,
没有合适的方法来覆盖

如果有人能在这里帮助我,我将不胜感激。如果有帮助,无论发生什么情况,都会使按钮永久禁用,无论
UseDefaultStartingPoint
的值是多少。所有内容都会生成并运行,但该按钮始终处于禁用状态


提前谢谢你

调试输出告诉我它找不到BoolNegation的组合器或转换器。我在
MvxWpfSetup
的源代码中注意到,它既不包含

protected virtual void RegisterBindingBuilderCallbacks() 
也不是

MvxAndroidSetup
类一样,这些方法都不能在我的
Setup.cs
类中被重写。所以我所做的就是加上

    protected void RegisterBindingbuilderCallbacks()
    {
        Mvx.CallbackWhenRegistered<IMvxValueConverterRegistry>(this.FillValueConverters);
    }

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

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

是否有任何跟踪?正在调用ValueConverter吗?(例如,如果在
Convert
中放置断点)。是否正在构造它(例如,如果在其中放入构造函数并添加断点?)。如果将两个标签的文本绑定到
文本UseDefaultStartingPoint
文本BoolNegation(UseDefaultStartingPoint)
,会发生什么情况-它们显示什么?如果这些都没有帮助,是否有一个完整的示例应用程序(一个带有复选框和按钮的页面都绑定到
UseDefaultStartingPoint
),您可以在任何地方发布(例如,发布到GitHub repo)不幸的是,它的机密工作相关代码,因此我无法在线发布。但是它非常简单,只是ViewModel中的一个
bool
属性,复选框的
IsChecked
属性绑定到该
bool
。当我将文本框绑定到
UseDefaultStartingPoint
时,它工作正常,显示
true
false
,并在选中复选框时更改,但当我绑定到
BoolNegation(UseDefaultStartingPoint)
时,它不显示文本。当我在
Convert
方法中设置断点时,什么也没有发生。当我添加一个构造器并在那里放置一个断点时,也没有发生任何事情。有任何痕迹吗?这将有助于有一个复制-不必是你的全部项目。。。我想做一个需要15分钟。。。我现在没有15分钟的空闲时间……我真的很感谢你的帮助和你的时间,我希望我能这样做,但我只能使用stackoverflow发布部分代码,我不能将完整的程序发布到任何一个位置。不幸的是,严格的规定。我保证我不是故意刁难你。但是没有任何痕迹。它没有提到调试输出中任何地方的ValueConverters。实际上它说,
找不到BoolNegation的组合器或转换器
,我还没有切换到正确的ViewModel。很抱歉,很高兴你让它工作了。我有点困惑为什么不为您工作-但无法从这里调试-所以生活继续:)
protected virtual void FillValueConverters(IMvxValueConverterRegistry registry)
    protected void RegisterBindingbuilderCallbacks()
    {
        Mvx.CallbackWhenRegistered<IMvxValueConverterRegistry>(this.FillValueConverters);
    }

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

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