Usercontrol绑定将值传递给属性

时间:2013-03-02 23:16:35

标签: 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控件的页面中,我尝试绑定到属性:

<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信息:无法分配给属性   'aG.Common.DatePicker.dateVal'。 [行:125位置:170]

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

2 个答案:

答案 0 :(得分:4)

如果要绑定到属性(例如,使用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}"/>

答案 1 :(得分:2)

如果您想将值绑定到dateVal,则必须在dateVal

DependancyProperty DatePicker.xaml.cs 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));
{{1}}