我创建了一个名为PINControl的自定义 View ,该 View 显示了一个PIN条目,其位数可配置。
我想在ContentPage中使用的XAML是

<local:PINControl x:Name="PIN"
    PINLength="5"
    PINCompleteCommand="{Binding CompletePIN}"
    HorizontalOptions="CenterAndExpand" />

我在PINControl中的BindableProperties是:

public class PINControl : StackLayout
{
    private const int LENGTH_DEFAULT = 4;

    public static readonly BindableProperty PINLengthProp = BindableProperty.Create<PINControl, int> (c => c.PINLength, LENGTH_DEFAULT);
    public static readonly BindableProperty PINCompleteCommandProp = BindableProperty.Create<PINControl, ICommand> (c => c.PINCompleteCommand, null);

    public ICommand PINCompleteCommand {
        get { return (ICommand)GetValue (PINCompleteCommandProp); }
        set { SetValue (PINCompleteCommandProp, value); }
    }
    public int PINLength {
        get { return (int)GetValue (PINLengthProp); }
        set { SetValue (PINLengthProp, value); }
    }

我的ViewModel包含

public ICommand CompletePIN { get; set; }

public PINViewModel ()
{
    CompletePIN = new Command<string> ((pin) => {
        var e = pin.ToString();
    });
}
PINLength似乎没有问题,但是PINCompleteCommand给我以下错误:



我找不到这个问题的解决方案。有人可以帮我吗?

最佳答案

命名BindableProperties时有一个好的做法,那就是将其命名为propertynameProperty

就您而言,当Xaml解析器遇到此指令时

PINCompleteCommand="{Binding CompletePIN}"

它首先尝试查找名称为PINCompleteCommandProperty的公共(public)静态BindableProperty,然后失败,然后查找名为PINCompleteCommand的常规属性,成功,然后尝试将值(一个Binding)分配给该属性(一个ICommand)并生成您看到的消息。

修正您的BindableProperty命名,就可以了。

关于mvvm - Xamarin表单自定义可绑定(bind)命令类型不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35158715/

10-12 15:32