Je construis un contrôle personnalisé et je veux passer une collection pour que l'affichage de contrôle que de collecte, mon code est comme suit:comment lier la collecte à un contrôle personnalisé dans WPF
<gm:Calendar SubscriptionSource="{Binding Subscriptions}"></gm:Calendar>
et contrôle personnalisé "Calendrier"
public static readonly DependencyProperty SubscriptionSourceProperty =
DependencyProperty.Register(
"SubscriptionSource",
typeof(ObservableCollection<Subscription>),
typeof(Calendar),
new FrameworkPropertyMetadata(new ObservableCollection<Subscription>()));
public ObservableCollection<Subscription> SubscriptionSource
{
get
{
return (ObservableCollection<Subscription>)GetValue(SubscriptionSourceProperty);
}
set
{
SetValue(SubscriptionSourceProperty, value);
}
}
J'utilise dans generic.xaml
<ItemsControl ItemsSource="{Binding SubscriptionSource}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<!--Box-->
<Border BorderBrush="Black" BorderThickness="1" Padding="0">
<Border Name="InnerBorder" BorderBrush="{Binding Path=Day, Converter={StaticResource DayBorderColorConverter}}" BorderThickness="2">
<Border.Style>
<Style TargetType="{x:Type Border}">
<Style.Triggers>
<!--Current Day-->
<DataTrigger Binding="{Binding IsToday}" Value="true">
<Setter Property="Border.Background">
<Setter.Value>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF1EA6C8" Offset="0"/>
<GradientStop Color="#FF0691B3" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<DockPanel>
<!--Day Number-->
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top" FlowDirection="RightToLeft">
<TextBlock TextAlignment="Right" Text="{Binding Day.Date, Converter={StaticResource DateConverter}, ConverterParameter=DAY}" FontSize="12" Margin="5,5,5,5" >
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsTargetMonth}" Value="false">
<Setter Property="TextBlock.Foreground" Value="Gray"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
<CheckBox IsEnabled="{Binding IsEnabled}" Style="{StaticResource DiscreteCheckBoxStyle}" />
</DockPanel>
</Border>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="6" Columns="7" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Je veux Liez Abonnements obse Collection rvable pour le contrôle personnalisé de calendrier afin que je puisse utiliser la collection dans le contrôle personnalisé, est-il là pour le faire?
La valeur de la propriété de dépendance sera vide pendant le constructeur car à ce moment-là, WPF n'a même pas construit le contrôle, et encore moins attribué des valeurs aux propriétés de dépendance. Il vaudrait mieux utiliser un PropertyChangedCallback sur la propriété de dépendance au lieu d'essayer d'accéder à la liste dans le constructeur. –
je vous remercie pour votre réponse, comme vous pouvez le voir, je veux Bind abonnements collection observable au calendrier de contrôle personnalisé afin que je puisse utiliser la collection dans le contrôle personnalisé, est-il là pour le faire? –
Comme je l'ai dit, utilisez un PropertyChangedCallback et vous pourrez accéder à la collection dans le contrôle personnalisé. Premier résultat de recherche Google: http://stackoverflow.com/questions/5498517/how-to-use-propertychangedcallback. –