我ListView的 ItemTemplate 中有一個系結,
<ListView ItemsSource="{Binding Capsules}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<views:CapsuleWidgetView Model="{Binding}"/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
在我的 CapsuleWidgetView 組件中,我有
public CapsuleWidgetViewModel ViewModel => (CapsuleWidgetViewModel)BindingContext;
public CapsuleModel Model
{
get => (CapsuleModel)GetValue(ModelProperty);
set => SetValue(ModelProperty, value);
}
public static readonly BindableProperty ModelProperty = BindableProperty.Create(
nameof(Model),
typeof(CapsuleModel),
typeof(CapsuleWidgetView),
propertyChanged: (bindable, value, newValue) =>
{
var view = (CapsuleWidgetView)bindable;
var modelValue = (CapsuleModel)newValue;
view.ViewModel.Capsule = modelValue;
});
每當我的系結集合ListView發生變化時,專案都會按預期重新生成。但是,eachModel始終為 null,并且永遠不會呼叫屬性設定器。不是來自ModelPropertypropertyChanged,也不是我定義的 setter 方法。我已經用除錯器確認了這一點并嘗試了日志記錄。
我最初認為我的問題來自系結為 null,但事實并非如此。我訪問系結物件屬性的另一個測驗成功。即使這樣,源集合也永遠不會添加空物件。
但是,CapsuleModel在 Xaml 中直接定義的 a 可以正常作業。
<views:CapsuleWidgetView>
<views:CapsuleWidgetView.Model>
<models:CapsuleModel Name="Hello?"/>
</views:CapsuleWidgetView.Model>
</views:CapsuleWidgetView>
參考模型的屬性并將它們系結到類似Label.Text作品的東西,我確信問題源于我的BindableProperty和/或BindingContext. 不過,兩者似乎都沒有錯。
uj5u.com熱心網友回復:
為什么沒有<views:CapsuleWidgetView Model="{Binding}"/>系結屬性名稱,例如<views:CapsuleWidgetView Model="{Binding Model}"/>?
在視圖模型中:
[ObservableProperty]
private ObservableCollection<Capsule> Capsules;
在模型中:
public class Capsule : ObservableObject
{
private CapsuleModel model;
public CapsuleModel Model
{
get => model;
set => SetProperty(ref model, value);
}
}
uj5u.com熱心網友回復:
參考這個答案,
永遠不要
BindingContext = this;在您的 ContentView 中這樣做,因為它會劫持頁面中的背景關系,試圖對其進行資料系結。而是使用Content.BindingContext = this;
在我的例子中,BindingContext是在 Xaml 中設定的,相當于BindingContext = this;. 我只是將其洗掉并將其添加到我的建構式中,就像這樣,
public CapsuleWidgetView()
{
InitializeComponent();
Content.BindingContext = new CapsuleWidgetViewModel();
}
請注意,它不能放在上面,InitializeComponent因為Content實際上還沒有創建。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/506335.html
標籤:C# xml xamarin.forms
