簡體   English   中英

如何將ObservableCollection正確綁定到Custom Control屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM