我正在尝试绑定日历的“DisplayDate”,以便在日期发生变化时通知控件。
这是我的xaml
<Window x:Class="CalenderControl.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>
<Calendar x:Name="_calendar" DisplayMode="Year" DisplayDate="{Binding Display}"/>
</Grid>
</Window>
和我的ViewModel
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string PropertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
private DateTime _displayDate;
public DateTime Display
{
get { return _displayDate; }
set { _displayDate = value; OnPropertyChanged("Display"); }
}
}
案例1:
毕竟这一切。我已经使用viewmodel分配了datacontext。
public MainWindow()
{
InitializeComponent();
this.DataContext = new ViewModel() { Display = DateTime.Parse("10/10/2015") };
}
这是绑定后的看法。
案例2:
然后,我试着没有使用ViewModel分配DataContext。
public MainWindow()
{
InitializeComponent();
// --- Commenting out ---
//this.DataContext = new ViewModel() { Display = DateTime.Parse("10/10/2015") };
}
这是没有绑定的外观
为什么在分配DataContext时宽度变得奇怪?有什么我做错了。 。
答案 0 :(得分:3)
由于未知原因,该问题似乎与DisplayMode="Year"
我可以建议您执行以下步骤,似乎在我的测试应用程序中工作。
1)从Xaml中删除DisplayMode 2)设置DataContext后,添加:
Action act = delegate()
{
_calendar.SelectedDate = ((ViewModel)DataContext).Display;
_calendar.DisplayMode = CalendarMode.Year;
_calendar.SelectedDate = null;
};
Dispatcher.BeginInvoke(act, DispatcherPriority.ApplicationIdle);
看起来很奇怪,但应该有效。如果需要,您无法将SelectedDate设置为null。
补充:有必要将您的日历日期设置为2015年的SelectedDate技巧,在截图中为第1年; - )
答案 1 :(得分:0)
导致DisplayDate
控件拉伸的Calendar
绑定不是;它将DisplayMode
设置为&#34; Year
&#34;。它看起来像是Calendar
控件中的错误。