我觉得我错过了一些非常明显的东西。我有一个自定义控件,它有一个视图模型,其中包含一堆字段,但此示例中最重要的是文本值。我可以使用自定义控件 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);
}
}
这有效。问题是,当我已经有了视图的视图模型但看不到从可绑定属性到视图模型字段的方法时,我不想绑定到视图代码中的某些内容。
我首先尝试使用可绑定属性的属性更改事件,但这必须是静态的,因此它无法访问控件视图模型/绑定上下文。我尝试在“文本”字段上使用该集,但这些似乎实际上并未被调用。这些都不起作用,并且在代码后面有一个文本字段纯粹是为了更新视图模型中的字段似乎效率低下
Edit:只是为了尝试进一步解释,
我有一个带有视图模型的页面
我有一个自定义控件,它的 xaml 绑定到视图模型
自定义控件在页面上使用如下
<ctrl:CustomControl Text="{Binding ControlText}"/>
目前,这会将自定义控件代码中的文本依赖属性和支持字段正确设置为页面视图模型 ControlText 的内容。
相反,我希望它在自定义控件视图模型上设置文本字段并触发 viewmodels 属性更改事件。
所以基本上它会去 PageVM.ControlText --> CustomControlVM.Text