2010-04-20 6 views
1

Моя цель состоит в том, чтобы выбрать год и месяц. Переведите выделение в дату, и пользовательский элемент управления отправит дату обратно в мою модель просмотра. Эта часть работает для меня ... Однако я не могу получить начальную дату ViewModel, чтобы установить эти выпадающие списки.WPF - Как использовать UserControl с зависимым свойством и моделью просмотра?

public static readonly DependencyProperty Date = 
     DependencyProperty.Register("ReturnDate", typeof(DateTime), typeof(DatePicker), 
     new FrameworkPropertyMetadata{BindsTwoWayByDefault = true,}); 

    public DateTime ReturnDate 
    { 
     get { return Convert.ToDateTime(GetValue(Date)); } 
     set 
     { 
      SetDropDowns(value); 
      SetValue(Date, value); 
     } 
    } 

SetDropDowns (значение) просто устанавливает выбранные элементы на полях со списком, однако, программа никогда не делает его к этому методу.

С точки зрения я использую:

<cc1:DatePicker ReturnDate="{Binding Path=StartDate, Mode=TwoWay}" IsStart="True" /> 

Если это был дан ответ, то мой плохой. Я огляделся и не видел ничего, что сработало для меня. Таким образом, когда программа загружается, как мне получить значение из модели представления для метода, чтобы установить комбинированные поля?

Спасибо,

-Скотт

ответ

2

При использовании свойства зависимостей, то CLR свойство сеттер никогда не стрелял (при связывании устанавливает свойство).

Правильный способ сделать это состоит в использовании PropertyChangedCallback на вашу собственность зависимостей:

public static readonly DependencyProperty Date = 
    DependencyProperty.Register("ReturnDate", typeof(DateTime), typeof(DatePicker), 
    new FrameworkPropertyMetadata(
     DateTime.Now, 
     FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, 
     new PropertyChangedCallback(dateChanged))); 

public DateTime ReturnDate 
{ 
    get { return Convert.ToDateTime(GetValue(Date)); } 
    set 
    { 
     SetDropDowns(value); 
     SetValue(Date, value); 
    } 
} 

private static void dateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    DatePicker instance = d as DatePicker; 
    instance.SetDropDowns((DateTime)e.NewValue); 
} 
+0

Спасибо за быстрый ответ, d.SetDropDowns должен быть intance.SetDropDowns и имя обратного вызова должен быть dateChanged , (Я только указываю на это для будущих читателей). Еще раз спасибо. – BlargINC

+0

@BlargINC: Я исправил это - извините - это то, что случается иногда, когда я пытаюсь набирать очень быстро здесь;) Это правильно исправить вашу проблему? Если это так, вы должны отметить его как ответ (небольшая галочка - я упоминаю только с тех пор, как вы новый пользователь;)) –

+0

Да, это сработало. Спасибо – BlargINC

Смежные вопросы