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.