【发布时间】:2015-11-28 22:29:10
【问题描述】:
我正在尝试绑定日历的“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:
毕竟。我已经为 datacontext 分配了 viewmodel。
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 时宽度会变得奇怪?有什么我做错了吗。 .
【问题讨论】:
-
应该是 OnPropertyChanged("Display");不是 OnPropertyChanged("DisplayDate");在setter中。(与宽度问题无关)
-
@尼基塔。 .是的。现在更新了。谢谢你。
标签: c# wpf binding wpf-controls