Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin 为自定义用户控件设置不同的绑定上下文_Xamarin_Xamarin.forms - Fatal编程技术网

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,或者从其父控件继承。这对我来说似乎是一个很大的限制。因为所以我不能独立写作