1

我有一个带有 DP 的自定义 userControl,并且只有当我使用数据模板之外的控件时,才能绑定到这些属性。

在 Datatemplates 之外,用户控件工作得很好。

XAML 在 DataTemplate 中测试 UserControl

        <GroupBox Header="DataTemplate" Padding="5">

            <ItemsControl ItemsSource="{Binding Dummies}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate DataType="local:Dummy">
                        <StackPanel Orientation="Horizontal" Margin="2">

                            <common:QuarterPicker SelectedFirstDay="{Binding Gueltigkeit}" Margin="5,0" />

                            <!--control the value of the item-->
                            <TextBlock Text="Gueltigkeit: "/>
                            <TextBlock Text="{Binding Gueltigkeit}"/>

                        </StackPanel>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>

            </ItemsControl>

        </GroupBox>

MainWindow 代码隐藏和 ViewModel

public partial class QuarterPickerTest : UserControl
{
    public QuarterPickerTest()
    {
        InitializeComponent();

        this.DataContext = new ViewModel();
    }
}

public class ViewModel
{
    public ViewModel()
    {
        this.Dummy = new Dummy { Gueltigkeit = DateTime.Today };

        this.Dummies = new List<Dummy>
            {
                new Dummy {Gueltigkeit = DateTime.Today},
                new Dummy {Gueltigkeit = DateTime.Today.AddMonths(6)},
                new Dummy {Gueltigkeit = DateTime.Today.AddDays(-6)},
            };
    }

    public Dummy Dummy { get; set; }

    public List<Dummy> Dummies { get; set; }
}

这是我的 UserControl 背后的代码

#region SelectedFirstDay

    public DateTime SelectedFirstDay
    {
        get { return (DateTime)GetValue(SelectedFirstDayProperty); }
        set { SetValue(SelectedFirstDayProperty, value); }
    }

    public static readonly DependencyProperty SelectedFirstDayProperty
        = DependencyProperty.Register("SelectedFirstDay", typeof (DateTime), typeof (QuarterPicker),
                                      new FrameworkPropertyMetadata(DateTime.Today, SelectedFirstDayPropertyChangedCallback) { BindsTwoWayByDefault = true });

    private static void SelectedFirstDayPropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs args)
    {
        var quarterPicker = dependencyObject as QuarterPicker;
        var date = (DateTime)args.NewValue;
        var quarter = GetQuarter(date);

        quarterPicker.UpdateProperties(date.Year, quarter);

        if (date.Year == quarterPicker.LeftInfiniteYear && quarter == quarterPicker.LeftInfiniteQuarter)
            quarterPicker.ShowPopupButtonLeftInfinite();
    }

    #endregion

感谢您的任何建议!

4

0 回答 0