我创建了一个名为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/