簡體   English   中英

Xamarin表單ListView綁定

[英]Xamarin Forms ListView Binding

現在我正在嘗試讓ListView擁有一些可綁定的CustomCells。 我在XAML中將單元格定義為ListView.ItemTemplate下的DataTemplate下的ViewCell。

讓我們簡單地說,我有兩個我在Cell中代表的字符串。 ViewCell看起來像:

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="simpletest.MyPage2">
    <ContentPage.Content>
        <StackLayout Spacing="10" x:Name="layout" Padding="8,10">
            <Label Text="{Binding Something}" />
            <ListView x:Name="listView">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <StackLayout Orientation="Horizontal">
                                <Label Text="{Binding Name}" />
                                <Label Text="{Binding Price}" />
                            </StackLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

我真的很想在XAML中保留它。 我不喜歡通過在C#中編寫整個內容將其變成一個膨脹的世界。

我有一個ViewModel用於此頁面,我在代碼隱藏文件中設置綁定上下文。 我的問題如下,我是否定義了一個在C#中擴展ViewCell以便綁定數據的類? 如前所述,我不想在C#中定義布局。 我想以這樣的方式綁定。 我想避免引用字段,因為文件背后的代碼傾向於引用組件。 這可能嗎? 我檢查了Xamarin網站,該示例使用后面的代碼混合和XAML(如果我正確解釋它...)。

編輯1:

我嘗試編寫一個模仿一些例子的文件,但這還不夠。 沒有一段代碼解釋這個文件是代表XAML中的ViewCell的文件,並且沒有明顯的方法來填充列表而不訪問代碼隱藏中的列表字段。 如果我只想使用綁定將一些項添加到此列表中,我會錯過什么?

public class ReportedAssignmentCell : ViewCell
{
    public ReportedAssignmentCell()
    {
    }

    public static readonly BindableProperty NameProperty = BindableProperty.Create("Name", typeof(string), typeof(ReportedAssignmentCell), "");
    public static readonly BindableProperty PriceProperty = BindableProperty.Create("Price", typeof(string), typeof(ReportedAssignmentCell), "");



    public string Name
    {
        get { return (string)GetValue(NameProperty); }
        set { SetValue(NameProperty, value); }
    }
    public string Price
    {
        get { return (string)GetValue(PriceProperty); }
        set { SetValue(NameProperty, value); }
    }
}

您需要將ListViewItemsSource (而不是ItemSource )屬性設置為項目列表。 該項列表應包含在您的視圖中。 像這樣的東西:

<ListView ItemsSource="{Binding ListOfItems}" ...>
...
</ListView>

然后在你的ViewModel中:

private ObservableCollection<ItemModel> _listOfItems;
public ObservableCollection <ItemModel> ListOfItems {
    get { return _listOfItems ?? _listOfItems == new ObservableCollection<ItemModel>; }
    set {
        if(_listOfItems != value) {
            _listOfItems = value;
            SetPropertyChanged();
        }
    }

現在,如果您想使用自定義的ReportedAssignmentCell ,但您也可以將StackLayoutLabels留在那里。 嘗試像我上面描述的那樣設置ItemsSource ,使用您發布的當前ListView XAML,看看它是否能為您提供所需的效果。 如果沒有,請告訴我。

ViewCell用於保存StackLayoutLabels等其他項目。 但它不必包含那些Label將要綁定到的所有屬性。 Binding從ListView.ItemsSource傳遞到ListView.ItemTemplate 該綁定不需要ViewCell具有綁定的任何特殊屬性。 我希望這是有道理的。 如果沒有讓我知道什么是不正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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