带西藏绑定的MVVMCross WPF值转换器未转换



我正在尝试制作一个值转换器,它需要一个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;
    }
}
}

我想使用这个值转换器将按钮的IsEnabled属性绑定到bool。我正在使用这里描述的西藏风格绑定,并完整地阅读了这个wiki页面,并观看了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>

在我的核心项目中,ConverterMarker类是一个空的public类,位于App.cs旁边,如视频中所述。下面是我的视图类中应该使用这个转换器的行:

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类中被覆盖。我所做的就是添加

    protected void RegisterBindingbuilderCallbacks()
    {
        Mvx.CallbackWhenRegistered<IMvxValueConverterRegistry>(this.FillValueConverters);
    }
    protected void FillValueConverters(IMvxValueConverterRegistry registry)
    {
        registry.AddOrOverwrite("BoolNegation", new BoolNegationValueConverter());
    }

编辑Setup.csInitializeLastChance()如下:

protected override void InitializeLastChance()
    {
        base.InitializeLastChance();
        var builder = new MvxWindowsBindingBuilder();
        this.RegisterBindingbuilderCallbacks();
        builder.DoRegistration();
    }

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

相关内容

  • 没有找到相关文章

最新更新