gpt4 book ai didi

WPF:将 DateTime 类型的 viewmodel 属性绑定(bind)到 ItemsControl 中的 Calendar

转载 作者:行者123 更新时间:2023-12-04 01:40:30 25 4
gpt4 key购买 nike

我遇到了 WPF 绑定(bind)问题。我想将月份列表绑定(bind)到显示每个月的日历控件的 ItemsControl。但是每个渲染的日历都显示 DateTime.Now,而不是绑定(bind)的 DateTimes。有谁知道为什么会这样?

这是我到目前为止所拥有的:

MainWindow.xaml

<Window x:Class="CalendarListTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ItemsControl x:Name="calendarList">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Calendar DisplayDate="{Binding CurrentDate}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>

**集合分配给ItemsSource的地方**
        private void Window_Loaded( object sender, RoutedEventArgs e )
{
CalendarList list = new CalendarList( );
list.Add( new CalendarMonth( ) { CurrentDate = DateTime.Parse( "1.1.1979" ) } );
list.Add( new CalendarMonth( ) { CurrentDate = DateTime.Parse( "1.2.1979" ) } );
list.Add( new CalendarMonth( ) { CurrentDate = DateTime.Parse( "1.3.1979" ) } );

calendarList.ItemsSource = list;
}

CalendarMonth ViewModel :
public class CalendarMonth
{
private DateTime _currentDate;

public DateTime CurrentDate
{
get { return _currentDate; }
set { _currentDate = value; }
}

}

以及要绑定(bind)到 ItemsControl 的 Collection :
public class CalendarList : ObservableCollection<CalendarMonth>
{
}

现在,结果:

enter image description here

为什么会这样?

编辑:提供 <Calendar DisplayDate="{Binding CurrentDate, Mode=OneWay}" /> 时绑定(bind)有效。

最佳答案

问题似乎与日历如何初始化 DisplayDate 属性有关。它目前这样做:

public Calendar() {
// ...
base.SetCurrentValueInternal(DisplayDateProperty, DateTime.Today);
}

看起来即使 DisplayDate 在绑定(bind)建立之前被初始化,它仍然会被推回绑定(bind)源,就好像它是在之后设置的一样。这很可能是一个错误。

您可以使用以下方法解决它:
public class MyCalendar : Calendar {
public MyCalendar() {
this.ClearValue(DisplayDateProperty);
}
}

或者,您可以在稍后(即加载日历时)使用事件处理程序或附加行为建立绑定(bind)。

关于WPF:将 DateTime 类型的 viewmodel 属性绑定(bind)到 ItemsControl 中的 Calendar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5041680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com