UWP中ListView添加项后不显示的问题求助
解决UWP ListView无法显示新增项的问题
针对你遇到的问题,结合代码分析,给出以下排查和修复步骤:
1. 修复Expense类的构造函数问题
你的Expense类定义中没有带三个参数的构造函数,但在AddExpense_Click事件里使用了new Expense(expenseName, expenseAmount, expenseCategory)实例化对象,这会导致编译错误或运行时异常,最终无法添加有效项到集合中。
修复方式:
- 给
Expense类添加对应构造函数:
public class Expense { public string Name { get; set; } public double Amount { get; set; } public string Category { get; set; } // 添加带参数的构造函数 public Expense(string name, double amount, string category) { Name = name; Amount = amount; Category = category; } }
或者改用对象初始化器(无需修改Expense类):
Expense expense = new Expense { Name = expenseName, Amount = expenseAmount, Category = expenseCategory };
2. 确保ViewModel的Expenses属性正确实现通知
虽然ObservableCollection本身会触发集合变更通知,但如果MainPageViewModel中Expenses属性是自动属性且未触发PropertyChanged事件,可能导致x:Bind无法正确关联集合。
优化ViewModel:
public class MainPageViewModel : INotifyPropertyChanged { private ObservableCollection<Expense> _expenses; public ObservableCollection<Expense> Expenses { get => _expenses; set { _expenses = value; OnPropertyChanged(nameof(Expenses)); } } public MainPageViewModel() { Expenses = new ObservableCollection<Expense>(); } public void AddExpense(Expense expense) { Expenses.Add(expense); } // INotifyPropertyChanged实现 public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
3. 检查ViewModel的实例化与绑定
确保页面的ViewModel属性已正确初始化,且未在运行时被重新赋值:
public sealed partial class MainPage : Page { public MainPageViewModel ViewModel { get; set; } public MainPage() { this.InitializeComponent(); ViewModel = new MainPageViewModel(); } // 其他代码... }
4. 避免非UI线程操作集合
如果SaveDataAsync方法中涉及修改Expenses集合的操作,必须确保在UI线程执行:
private async Task SaveDataAsync() { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { // 此处执行集合修改操作 }); }
5. 验证x:Bind的模式与拼写
确认ListView的ItemsSource绑定模式为OneWay,且属性名称拼写正确:
<ListView Name="ExpensesView" Margin="10" Header="Expense" ItemsSource="{x:Bind ViewModel.Expenses, Mode=OneWay}">
按照以上步骤排查后,新增的项应该能正常显示在ListView中。
内容的提问来源于stack exchange,提问作者Anton Boyko
相关产品推荐
相关产品推荐

