[英]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); }
}
}
您需要將ListView
的ItemsSource
(而不是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
,但您也可以將StackLayout
和Labels
留在那里。 嘗試像我上面描述的那樣設置ItemsSource
,使用您發布的當前ListView
XAML,看看它是否能為您提供所需的效果。 如果沒有,請告訴我。
ViewCell
用於保存StackLayout
和Labels
等其他項目。 但它不必包含那些Label
將要綁定到的所有屬性。 Binding從ListView.ItemsSource
傳遞到ListView.ItemTemplate
。 該綁定不需要ViewCell
具有綁定的任何特殊屬性。 我希望這是有道理的。 如果沒有讓我知道什么是不正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.