Xamarin 为自定义用户控件设置不同的绑定上下文
我正在尝试创建名为Xamarin 为自定义用户控件设置不同的绑定上下文,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我正在尝试创建名为LocationSelector的第一个Xamarin.Forms自定义用户控件。它有一个条目,当用户输入内容时,会显示一个带有可选择位置的列表(类似于谷歌地图中的选择) 所选位置是控件的重要“返回值”。 我的计划是捕获列表中的ItemSelected事件,并设置SelectedLocation属性LocationSelector被设计为MVVM,因为到目前为止,这里的一切都在工作,只有代码在后面(我认为这足以描述问题): 不幸的是,这不起作用。输出抛出绑定警告: 绑定:“Ap
LocationSelector
的第一个Xamarin.Forms
自定义用户控件。它有一个条目
,当用户输入内容时,会显示一个带有可选择位置的列表(类似于谷歌地图中的选择)
所选位置是控件的重要“返回值”。
我的计划是捕获列表中的ItemSelected
事件,并设置SelectedLocation
属性LocationSelector
被设计为MVVM,因为到目前为止,这里的一切都在工作,只有代码在后面(我认为这足以描述问题):
不幸的是,这不起作用。输出抛出绑定警告:
绑定:“Application.App.CustomControls.LocationSelectorModel”上未找到“Location”属性,目标属性:“Application.App.CustomControls.LocationSelector.SelectedLocation”
为什么将绑定指向“在”我的自定义控件中使用的ViewModel中的属性,而不是指向视图的
BindingContext
中的属性?问题是将BindingContext
设置为用户控件的视图模型:
public LocationSelector()
{
var model = new LocationSelectorModel();
BindingContext = model; // this causes the problem
// ...
}
在帖子里我找到了解决办法。将BindingContext
设置为每个子元素,而不是整个用户控件,这样做:
public LocationSelector()
{
var model = new LocationSelectorModel();
foreach (var child in Children)
{
child.BindingContext = model;
}
}
问题在于将
BindingContext
设置为用户控件的视图模型:
public LocationSelector()
{
var model = new LocationSelectorModel();
BindingContext = model; // this causes the problem
// ...
}
在帖子里我找到了解决办法。将BindingContext
设置为每个子元素,而不是整个用户控件,这样做:
public LocationSelector()
{
var model = new LocationSelectorModel();
foreach (var child in Children)
{
child.BindingContext = model;
}
}
问题在于将
BindingContext
设置为用户控件的视图模型:
public LocationSelector()
{
var model = new LocationSelectorModel();
BindingContext = model; // this causes the problem
// ...
}
在帖子里我找到了解决办法。将BindingContext
设置为每个子元素,而不是整个用户控件,这样做:
public LocationSelector()
{
var model = new LocationSelectorModel();
foreach (var child in Children)
{
child.BindingContext = model;
}
}
问题在于将
BindingContext
设置为用户控件的视图模型:
public LocationSelector()
{
var model = new LocationSelectorModel();
BindingContext = model; // this causes the problem
// ...
}
在帖子里我找到了解决办法。将BindingContext
设置为每个子元素,而不是整个用户控件,这样做:
public LocationSelector()
{
var model = new LocationSelectorModel();
foreach (var child in Children)
{
child.BindingContext = model;
}
}
在LocationSelector()构造函数中,您显式地将BindingContext设置为LocationSelectorModel的实例。这就是我所担心的。这是否意味着我无法创建MVVM样式的用户控件?标准控件并没有各自的ViewModel。它们只是有一个绑定上下文。您的控件应该通过属性获取其BindingContext,或者从其父控件继承。这对我来说似乎是一个很大的限制。因为我无法独立编写工作的用户控件。例如,在我的例子中,带有建议和一些可见标志的列表在用户控件中非常重要,我不想在每次使用控件时都关心它们。但也许到目前为止我还不了解自定义用户控件的概念。或者我需要用代码而不是XAML&代码来完整地编写它们(我想这会有用)?!如果控件中有要绑定到某些硬编码(或内部)值的元素,以及其他要绑定到控件外部绑定上下文的元素,则可以这样做,只需使用多个绑定上下文。在LocationSelector()中构造函数您正在显式地将BindingContext设置为LocationSelectorModel的实例。这就是我所担心的。这是否意味着我无法创建MVVM样式的用户控件?标准控件并没有各自的ViewModel。它们只是有一个绑定上下文。您的控件应该通过属性获取其BindingContext,或者从其父控件继承。这对我来说似乎是一个很大的限制。因为我无法独立编写工作的用户控件。例如,在我的例子中,带有建议和一些可见标志的列表在用户控件中非常重要,我不想在每次使用控件时都关心它们。但也许到目前为止我还不了解自定义用户控件的概念。或者我需要用代码而不是XAML&代码来完整地编写它们(我想这会有用)?!如果控件中有要绑定到某些硬编码(或内部)值的元素,以及其他要绑定到控件外部绑定上下文的元素,则可以这样做,只需使用多个绑定上下文。在LocationSelector()中构造函数您正在显式地将BindingContext设置为LocationSelectorModel的实例。这就是我所担心的。这是否意味着我无法创建MVVM样式的用户控件?标准控件并没有各自的ViewModel。它们只是有一个绑定上下文。您的控件应该通过属性获取其BindingContext,或者从其父控件继承。这对我来说似乎是一个很大的限制。因为我无法独立编写工作的用户控件。例如,在我的例子中,带有建议和一些可见标志的列表在用户控件中非常重要,我不想在每次使用控件时都关心它们。但也许到目前为止我还不了解自定义用户控件的概念。或者我需要用代码而不是XAML&代码来完整地编写它们(我想这会有用)?!如果控件中有要绑定到某些硬编码(或内部)值的元素,以及其他要绑定到控件外部绑定上下文的元素,则可以这样做,只需使用多个绑定上下文。在LocationSelector()中构造函数您正在显式地将BindingContext设置为LocationSelectorModel的实例。这就是我所担心的。这是否意味着我无法创建MVVM样式的用户控件?标准控件并没有各自的ViewModel。它们只是有一个绑定上下文。您的控件应该通过属性获取其BindingContext,或者从其父控件继承。这对我来说似乎是一个很大的限制。因为所以我不能独立写作