2016-10-22 3 views
0

J'ai recherché pendant un certain temps et n'ai pas été en mesure de trouver une solution.Liaison à Listbox sélectionnéArticle sélectionné dans le contrôle personnalisé

Mon but est de lier une propriété de mon ViewModel à l'élément sélectionné d'une zone de liste dans mon contrôle personnalisé.

Première mise hors tension - Ce contrôle de calendrier provient de Jarloo Custom Calendar. Je l'ai simplement modifié pour un usage personnel personnalisé.

Le contrôle du calendrier (en abrégé) est comme ci-dessous:

<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> 


et local (en abrégé):

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); 
     } 

Dans la fenêtre qui utilise ce contrôle, je l'ai essayé lier à cette propriété SelectedDay et même fait un autre DP pour passer la valeur juste pour le test. Aucune des valeurs ne lie correctement.

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


Je ne comprends pas ... Pourquoi cela ne fonctionne pas?
Tout ce que je veux faire est d'exposer une propriété qui reflète l'élément sélectionné dans la liste des jours de calendrier.

Répondre