[英]How to bind properly and ObservableCollection to a Custom Control property?
我已經創建了一個自定義控件,該控件具有一些要綁定的屬性,在我的情況下,該控件只是使控件本身可見或不可見,而另一個控件則傳遞先前填充的ObservableCollection來創建控件內容。
第一個可以正常運行,但是即使我在XAML中添加了ObservableCollection,也無法正確綁定它。
這是我在使其可見后嘗試在隊列控件中進行迭代時得到的結果:
https://i.imgur.com/dddFoWu.png
我做錯了什么?
提前致謝。
這是我的財產:
public static readonly BindableProperty ContractsListProperty = BindableProperty.Create(nameof(ContractList), typeof(ObservableCollection<object>), typeof(PrivacyControl), new ObservableCollection<object>(), BindingMode.TwoWay, propertyChanged: ContractListPropertyChangedDelegate);
public ObservableCollection<object> ContractList
{
get =>
(ObservableCollection<object>)GetValue(ContractsListProperty);
set => SetValue(ContractsListProperty, value);
}
這是我在XAML中的控件:
<controls:PrivacyControl IsPrivacyVisible="{Binding IsPrivacyStackVisible}" ContractList="{Binding CardsAndLoansList}" />
編輯:
這是我的VM,我在其中檢查Cards / Loans並將Cards / Loans添加到ObservableCollection<object>
,“ CardsAndLoans”也在ctor中初始化。
private ObservableCollection<object> cardsAndLoansList;
public ObservableCollection<object> CardsAndLoansList
{
get => cardsAndLoansList;
set { cardsAndLoansList = value; RaisePropertyChanged(); }
}
private async Task InitUserInfoAndPrivacy()
{
CardsAndLoansList.Clear();
await InitUserInformation();
var hasLoans = GlobalSettings.Loans.NotNullOrEmpty();
if (hasLoans)
{
foreach (var loan in GlobalSettings.Loans)
CardsAndLoansList.Add(loan);
}
ExampleList = CardsAndLoansList.ToList(); //<=== This is from an another try with List<obj>.
IsPrivacyStackVisible = UserData.ContractList.NotNullOrEmpty() || hasLoans;
}
似乎有錯字。 BindableProperty
稱為ContractsListProperty
,而屬性本身稱為ContractList
(缺少s)。 將此更改為ContractsList
,它應該可以工作( BindableProperty
名稱必須是屬性名稱+“ Property”)
希望這可以幫助
您需要給自定義控件命名,然后將源引用添加到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}}" >
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.