我正在尝试将模型中的一些数据加载到xaml.cs文件中。但它不起作用。在我的Mainpage.xaml中,我在标签中有一个绑定属性。在后面的代码文件BindingContext到我的ViewModel和有我有一个列表与一些类型的数据我错过了什么吗?
MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="DatabindingNavListExample.MainPage"
xmlns:models="clr-namespace:DatabindingNavListExample.Models"
xmlns:viewmodels="clr-namespace:DatabindingNavListExample.ViewModels">
<ScrollView>
<VerticalStackLayout>
<Label FontSize="50" Text="{Binding Userdata.Username}" />
<Label FontSize="50" Text="{Binding Userdata.Firstname}" />
<Label FontSize="50" Text="{Binding Userdata.Lastname}" />
</VerticalStackLayout>
</ScrollView>
</ContentPage>
MainPage.xaml.cs
using DatabindingNavListExample.ViewModels;
namespace DatabindingNavListExample;
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
BindingContext = new MainPageViewModel();
}
}
MainPageViewModel.cs
using DatabindingNavListExample.Models;
namespace DatabindingNavListExample.ViewModels {
public class MainPageViewModel {
public List<UserModel> Userdata { get; set; } = new();
public MainPageViewModel() {
Userdata.Add(new UserModel() { Username = "test", Firstname = "John",
Lastname = "Doe"});
}
}
}
UserModel.cs
using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace DatabindingNavListExample.Models {
public class UserModel : INotifyPropertyChanged {
private string username;
private string firstname;
private string lastname;
public string Username {
get => username; set {
username = value;
OnPropertyChanged();
}
}
public string Firstname {
get => firstname; set {
firstname = value;
OnPropertyChanged();
}
}
public string Lastname {
get => lastname; set {
lastname = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propName = null) {
PropertyChanged?.Invoke(this,
new PropertyChangedEventArgs(propName));
}
}
}
2条答案
按热度按时间ghhaqwfi1#
由于
Userdata
只包含UserModel
的一个示例,因此您需要按照Jason的建议显式分配它,如下所示:31moq8wy2#
当你想在WPF中使用集合作为绑定时,你应该使用
ObservableCollection<T>
而不是List<T>
。ObservableCollection<T>
具有已经内置的INotifyPropertyChanged
接口的功能,而常规的List<T>
没有。如果您的
List<T>
是预填充的,而不仅仅是new List<T>()
,那么您实际上会看到一些数据显示在您的UI中。但是,对List<T>
中的数据所做的任何更改都不会转换到您的UI,因为UI不会收到该List中的数据已更改的通知。