這聽起來像你想從調整模型更新ListView
項目雖然你被卡住一路上有點困惑?
請嘗試下面的示例,這是一個簡單的示例,它將創建您的MyPubClass
的ObservableCollection
。
屏幕底部的按鈕將顯示如何通過修改每個項目直接更新模型,並將這些更改反映在ListView
上。
在此示例中,每個項目只循環顏色Red
,Green
和Blue
。
在MyViewCell
類,這就是你將最有可能創造XAML
類似的東西,通過模型的一個實現BindableProperty
TheBackgroundColor
屬性綁定到Labels
的BackgroundColor
財產。
實施例: -
StackLayout objStackLayout = new StackLayout()
{
Orientation = StackOrientation.Vertical,
};
ListView objListView = new ListView();
objStackLayout.Children.Add(objListView);
objListView.ItemTemplate = new DataTemplate(typeof(MyViewCell));
ObservableCollection<MyPubClass> objItems = new ObservableCollection<MyPubClass>();
objListView.ItemsSource = objItems;
objItems.Add(new MyPubClass(Color.Red));
objItems.Add(new MyPubClass(Color.Green));
objItems.Add(new MyPubClass(Color.Blue));
Button objButton1 = new Button()
{
Text = "Change Colors"
};
objButton1.Clicked+=((o2,e2)=>
{
foreach (MyPubClass objItem in objItems)
{
if (objItem.TheBackgroundColor == Color.Red)
{
objItem.TheBackgroundColor = Color.Green;
}
else if (objItem.TheBackgroundColor == Color.Green)
{
objItem.TheBackgroundColor = Color.Blue;
}
else if (objItem.TheBackgroundColor == Color.Blue)
{
objItem.TheBackgroundColor = Color.Red;
}
}
});
objStackLayout.Children.Add(objButton1);
定製ViewCell: -
public class MyViewCell
: ViewCell
{
public MyViewCell()
{
Label objLabel = new Label();
objLabel.Text = "Hello";
objLabel.SetBinding(Label.BackgroundColorProperty, "TheBackgroundColor");
this.View = objLabel;
}
}
支持級別: -
public class MyPubClass
: Xamarin.Forms.View
{
public static readonly BindableProperty TheBackgroundColorProperty = BindableProperty.Create<MyPubClass, Color>(p => p.TheBackgroundColor, default(Color));
public Color TheBackgroundColor
{
get { return (Color)GetValue(TheBackgroundColorProperty); }
set { SetValue(TheBackgroundColorProperty, value); }
}
public MyPubClass(Color pobjColor)
{
this.TheBackgroundColor = pobjColor;
}
}
pubClass需要實現INotifyPropert yChanged – Jason
檢查我更新的代碼,類似的東西?並從OnAppearing中刪除它? –
還有更多。請參閱https://developer.xamarin.com/guides/xamarin-forms/user-interface/xaml-basics/data_bindings_to_mvvm/。此外,您發佈的代碼不會顯示您爲頁面設置BindingContext的位置。最後,你好像從多個文件發佈片段,這會使你的代碼難以閱讀。請明確指出每段代碼的來源。 – Jason