WPF ListView绑定ObservableCollection无法显示日历条目问题求助
解决ListView绑定ObservableCollection后不显示日历项的问题
看起来你的问题核心是DataContext未正确关联,再加上可能的日期解析隐患,下面一步步帮你排查修复:
1. 为UserControl设置正确的DataContext
你的Kalender用户控件没有把DataContext指向KalenderVM实例,导致ListView找不到Termine集合,进而每个日历项的绑定无法定位到Start/Finish属性。修改Kalender的构造函数:
public partial class Kalender : UserControl { public Kalender() { InitializeComponent(); // 添加这行,将ViewModel绑定到控件的DataContext DataContext = new KalenderVM(); } }
2. 确保DateTime解析成功(避免无效日期)
你用DateTime.TryParse处理"25.10.2021"这种格式时,可能会因为系统默认文化设置(比如en-US)导致解析失败,生成无效日期。建议指定文化信息确保解析正确:
先在ViewModel里引入System.Globalization,再修改解析代码:
using System.Globalization; // ... public KalenderVM() { DateTime dateValue1; DateTime dateValue2; // 指定德语文化适配dd.MM.yyyy格式 var deCulture = CultureInfo.GetCultureInfo("de-DE"); DateTime.TryParse("25.10.2021 6:00", deCulture, DateTimeStyles.None, out dateValue1); DateTime.TryParse("25.10.2021 16:00", deCulture, DateTimeStyles.None, out dateValue2); Termine.Add(new Termin(dateValue1, dateValue2, "Jan", "Anker")); DateTime.TryParse("26.10.2021 6:00", deCulture, DateTimeStyles.None, out dateValue1); DateTime.TryParse("26.10.2021 16:00", deCulture, DateTimeStyles.None, out dateValue2); Termine.Add(new Termin(dateValue1, dateValue2, "Jan", "Anker")); DateTime.TryParse("27.10.2021 6:00", deCulture, DateTimeStyles.None, out dateValue1); DateTime.TryParse("27.10.2021 18:00", deCulture, DateTimeStyles.None, out dateValue2); Termine.Add(new Termin(dateValue1, dateValue2, "Jan", "Frei")); }
3. 检查XAML中CalendarView的完整结构
确保你的XAML标签闭合,没有语法错误:
<ListView ItemsSource="{Binding Termine}"> <ListView.View> <controls:CalendarView ItemBeginBinding="{Binding Start}" ItemEndBinding="{Binding Finish}"> <!-- 可按需添加CalendarView的模板、样式等配置 --> </controls:CalendarView> </ListView.View> </ListView>
4. 可选:优化ViewModel集合属性(避免空引用)
虽然你已经初始化了_termine,可以再优化属性getter确保不会返回null:
private ObservableCollection<Termin> _termine; public ObservableCollection<Termin> Termine { get { _termine ??= new ObservableCollection<Termin>(); return _termine; } set { _termine = value; } }
做完这些修改后,你的ListView应该能正确加载ViewModel中的3个测试日历项了。最关键的问题是控件没有绑定到ViewModel,导致绑定上下文错误,找不到对应的属性。
内容的提问来源于stack exchange,提问作者der_nala
相关产品推荐
相关产品推荐

