wpf - 用户控件绑定(bind)将值传递给属性

标签 wpf silverlight xaml windows-8 winrt-xaml

由于 Windows8 还没有充实的 DatePicker,我决定按照其中的一些示例自己动手做。

它本身工作正常,但现在我有日期,我想用它预填充 DatePicker。

我在下面的 DatePicker.xaml.cs 文件中创建了一个属性:

public DateTime dateVal
{
    get
    {
        return m_dateVal;
    }
    set
    {
        m_dateVal = value;
    }
}

然后在显示 DatePicker 控件的页面中,我尝试绑定(bind)到该属性:

<dp:DatePicker Foreground="Black" Height="100" Margin="10,25" Grid.Column="1" VerticalAlignment="Center" BorderBrush="Black" BorderThickness="1" dateVal="{Binding repairInfoSingle.repairDate, Mode=TwoWay}"/>

但是,进入 DatePicker.xaml.cs 文件时,dateVal 属性从未填充我传递给它的日期。

然后我在输出窗口中得到一个错误:

WinRT information: Failed to assign to property 'aG.Common.DatePicker.dateVal'. [Line: 125 Position: 170]

我希望传递日期,然后在构造函数中我可以通过解析月、日和年来设置 SelectedIndex 值。

最佳答案

如果您想绑定(bind)到一个属性(例如使用 DateVal={Binding ...})- DateVal 不能是常规的 CLR 属性。
您需要将其更改为 DependencyProperty

所以在你的例子中:

public DateTime DateVal
{  
    get { return (DateTime) GetValue(DateValProperty); }  
    set { SetValue(DateValProperty, value); } 
}

public static readonly DependencyProperty DateValProperty = 
  DependencyProperty.Register("DateVal", typeof(DateTime), typeof(DatePicker),
  new PropertyMetadata(DateTime.MinValue));

现在它应该可以正常工作了:

<dp:DatePicker DateVal="{Binding repairInfoSingle.repairDate, Mode=TwoWay}"/>

关于wpf - 用户控件绑定(bind)将值传递给属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15180554/

相关文章:

c# - WPF 扩展器验证

wpf - 如何在 WindowStyle ="None"的 WPF 窗口中强制执行 MinWidth 和 MinHeight?

c# - WPF多级绑定(bind)线程问题

设计时的 Silverlight 5 标记扩展

c# - Silverlight 4.0 - 通过自定义安装程序部署 XAP 并将其配置为 OOB + 提升权限

.net - 按下“Shift”之后是否可以获取字符,而无需按下shift?

c# - Xamarin - NavigationPage.TitleView 内的 StackLayout 不会使用所有空间吗?

WPF ComboBox SelectedItem

c# - CUIT(编码的 UI 测试)+ MVVM——我现在必须开始命名我的所有控件吗?

C# WPF 捕获键盘和鼠标