C# 如何将ObservableCollection正确绑定到自定义控件属性?

C# 如何将ObservableCollection正确绑定到自定义控件属性?,c#,xamarin.forms,C#,Xamarin.forms,我创建了一个自定义控件,其中包含一些要绑定的属性,在我的示例中,只是为了使控件本身可见或不可见,而另一个用于传递先前填充的ObservableCollection以创建控件内容 第一个可以很好地工作,但是ObservableCollection没有被正确绑定,即使我在XAML中添加了它 这是我在队列控制中尝试在使其可见后对其进行迭代时得到的结果: 我做错了什么 提前谢谢 这是我的财产: 公共静态只读BindableProperty ContractsListProperty=BindableP

我创建了一个自定义控件,其中包含一些要绑定的属性,在我的示例中,只是为了使控件本身可见或不可见,而另一个用于传递先前填充的ObservableCollection以创建控件内容

第一个可以很好地工作,但是ObservableCollection没有被正确绑定,即使我在XAML中添加了它

这是我在队列控制中尝试在使其可见后对其进行迭代时得到的结果:

我做错了什么

提前谢谢

这是我的财产:

公共静态只读BindableProperty ContractsListProperty=BindableProperty.Create(名称(ContractList)、类型(ObservableCollection)、类型(PrivacyControl)、新的ObservableCollection()、BindingMode.TwoWay、属性更改:ContractListPropertyChangedElegate);
公共可观察收集合同列表
{
获取=>
(ObservableCollection)GetValue(合同财产);
set=>SetValue(合同属性,值);
}
这是我在XAML中的控件:


编辑:

这是我的虚拟机,我在这里检查卡/贷款并将其添加到
可观察集合中
,“CardsAndLoans”也在ctor中初始化

private observeCollection卡和贷款清单;
公众可观察的收款卡和贷款清单
{
get=>cardsAndLoansList;
设置{cardsAndLoansList=value;RaisePropertyChanged();}
}
私有异步任务InitUserInfoAndPrivacy()
{
CardsAndLoansList.Clear();
等待InitUserInformation();
var hasLoans=GlobalSettings.Loans.NotNullOrEmpty();
如果(有贷款)
{
foreach(GlobalSettings.Loans中的var贷款)
CardsAndLoansList.添加(贷款);
}

ExampleList=CardsAndLoansList.ToList();//您需要为自定义控件指定一个名称,然后将源引用添加到Xaml中的绑定属性。例如

顶部xaml标记应具有名称

<ContentView
xmlns:forms="clr-namespace:Xamarin.Forms;assembly=Xamarin.Forms.Core" xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="Sample.Controls.List"
         x:Name="listControl">

然后在绑定属性时,添加如下所示的源引用

<ListView  IsVisible="{Binding IsPrivacyVisible, Source={x:Reference listControl}}" ItemSource="{Binding ContractList, Source={x:Reference listControl}}" >

似乎有输入错误。
BindableProperty
称为
ContractsListProperty
,属性本身称为
ContractList
(缺少一个s)。将其更改为
ContractsList
,它应该可以工作(
BindableProperty
名称必须是属性的名称+“属性”)


希望这有帮助

控件的
BindingContext
是什么?它是否有类型为
observeCollection
的名为“CardsAndLoansList”的属性?请记住在提问时提供。创建控件时的
BindingContext
是我的ViewModel,我在其中填充属性“CardsAndLoansList”是一个
可观察的集合
。我使用
CardsAndLoansList.Add(x)填充此列表
。我也尝试了一个简单的
列表
,结果也是一样。你能在
CardsAndLoansList
的声明位置和分配位置共享代码吗?@Knoop当然,我刚刚用一些虚拟机行更新了这个问题。希望它能有所帮助。感谢你的帮助@Abdul Gani,但不起作用。我继承了这个项目,看到他们正在使用你的so其他元素的解析,但无法解决我的问题。哦,我的…就是这样!不知道必须完全相同。永远不会注意到。TY!是的,我不知道为什么需要这样做(因为您已经将属性的名称传递给BindableProperty构造函数)但出于某种原因,它必须匹配。不管怎样,欢迎您!祝项目好运:-)