绑定到自定义控件中的嵌套列表框SelectedItem

本文关键字:列表 SelectedItem 嵌套 自定义控件 绑定 | 更新日期: 2023-09-27 18:14:17

我一直在寻找一段时间,还没有能够找到一个解决方案。

我的目标是将ViewModel中的一个属性绑定到自定义控件中列表框的选定项。

首先-这个日历控件来自Jarloo自定义日历。我只是在修改它以供个人使用。

日历控件(缩写)如下:

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


我不明白……为什么这不起作用?
我所要做的就是公开一个属性,该属性反映了Days日历列表中所选项目。

绑定到自定义控件中的嵌套列表框SelectedItem

我在微软论坛上发布了这个问题,并从Magnus那里得到了正确的答案。

https://social.msdn.microsoft.com/forums/vstudio/en us/d0d8362e - 8341 - 410 - c - 8364 - 557 - c5b4345d0/binding - -嵌套列表框设置selecteditem -在-自定义- control?forum=wpf