2016-10-22 3 views
0

Я искал какое-то время и не смог найти решение.Связывание с вложенным Listbox SelectedItem в пользовательском контроле

Моя цель - привязать свойство в моей модели ViewModel к выбранному элементу списка в моем настраиваемом элементе управления.

Первый раз - этот элемент управления календарем был получен от Jarloo Custom Calendar. Я просто модифицировал его для личного использования.

календарь управления (сокращенно), как показано ниже:

<ResourceDictionary> 
     <Style TargetType="{x:Type Neptune:Calendar}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type Neptune:Calendar}"> 

        <!--Some header items and other misc controls....--> 

         <DockPanel> 

          <!--Calendar--> 
          <ListBox ItemsSource="{Binding Days}" Background="{x:Null}" 
          SelectedItem="{Binding SelectedDay, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 

         </DockPanel> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 


и местное (сокращенно):

public class Calendar : Control 
    { 
     public ObservableCollection<Day> Days { get; set; } 

     //SelectedDay Property 
     public static readonly DependencyProperty SelectedDayProperty = 
     DependencyProperty.Register("SelectedDay", typeof(Day), typeof(Calendar), 
     new PropertyMetadata(null, OnSelectedDayChanged)); 

     public Day SelectedDay 
     { 
      get { return (Day)GetValue(SelectedDayProperty); } 
      set { SetValue(SelectedDayProperty, value); } 
     } 

     private static void OnSelectedDayChanged(DependencyObject pager, DependencyPropertyChangedEventArgs e) 
     { 
      Calendar d = pager as Calendar; 
      //MessageBox.Show(d.SelectedDaDateString());///THIS SHOWS CORRECT SELECTED DATE!!!! 
      d.SetValue(ThisDayProperty, d.SelectedDay); 
     } 

В окне, которое использует этот элемент управления, я попытался связывания с это свойство SelectedDay и даже сделал другой DP для передачи значения только для тестирования. Ни одно из значений не является обязательным.

<Neptune:Calendar Grid.Row="1" x:Name="Calendar" Margin="0,10,0,0" 
    ThisDay="{Binding DaySelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, 
    RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"> 


Я не понимаю ... Почему это не работает?
Все, что я хочу сделать, это выставить свойство, которое отображает выбранный элемент в списке календарей Дней.

ответ

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