我感觉自己漏掉了非常明显的东西。我有一个带有视图模型的自定义控件,其中包含许多字段,但这个示例中最重要的是文本值。我可以在自定义控件的XAML中很容易地使用以下内容进行绑定。
<Label Text="{Binding Text}" />
我希望让任何调用此自定义控件的内容都可以使用它。据我所知,这需要使用可绑定属性。
public static readonly BindableProperty TextProperty = BindableProperty.Create(propertyName: nameof(Text)
, returnType: typeof(string)
, declaringType: typeof(CustomControl));
public string Text
{
get
{
return GetValue(TextProperty).ToString();
}
set
{
SetValue(TextProperty, value);
}
}
这可以实现。问题是,我不想在视图代码后端绑定到某个东西,因为我已经为该视图拥有一个视图模型,但是我无法找到从可绑定属性到视图模型字段的方法。
起初,我尝试使用可绑定属性的属性更改事件,但是这必须是静态的,因此无法访问控件的视图模型/绑定上下文。我尝试使用Text字段上的set,但这些似乎没有被调用。这两种方法都不起作用,似乎将在代码后面纯粹地更新视图模型中的字段中具有文本字段效率不高。
编辑:进一步解释一下, 我有一个带有视图模型的页面
我有一个自定义控件,其xaml绑定到视图模型
自定义控件在页面上使用如下:
<ctrl:CustomControl Text="{Binding ControlText}"/>
目前,这将正确设置自定义控件代码后台中的Text依赖属性和后备字段,以反映页面视图模型ControlText的内容。
相反,我想要将其设置为自定义控件视图模型上的Text字段,并触发视图模型的属性更改事件。
因此,基本上它会变成PageVM.ControlText --> CustomControlVM.Text