2013-03-02 2 views
2

Так как Windows8 еще не имеет финишированного DatePicker, я решил следовать некоторым примерам, которые там были свернуты.Usercontrol привязка передачи значения к свойству

Сам по себе он отлично работает, но теперь у меня есть даты, которые я хочу предварительно заполнить 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. [Line: 125 Позиция: 170]

Я надеялся передать дату так, то в конструкторе я мог бы установить SelectedIndex значения путем разбора из Месяцы, дни и годы.

ответ

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}"/> 
2

Если вы хотите связать значение до dateVal вам необходимо будет сделать dateVal a 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)); 
Смежные вопросы