【问题标题】:XAML MVVM DatePicker - How do I get the data?XAML MVVM DatePicker - 如何获取数据?
【发布时间】:2016-09-21 19:39:52
【问题描述】:

我有一个带有 DatePicker 的视图,该视图绑定到我的 ViewModel 中的 DateTime 属性。但是,日期值始终显示为 null,即使我选择了与默认值不同的值。有人在 DatePicker 上取得了成功吗?如果是这样,我做错了什么?

相关代码:

查看:

<DatePicker x:Name="startDateUpdatePick" HorizontalAlignment="Left" Height="23" VerticalAlignment="Top" Width="120" Margin="1.5" 
   Text="{Binding SelectedProjectData.ProjectStartDate, UpdateSourceTrigger=PropertyChanged, TargetNullValue=''}"/>

视图模型:

public PSViewModel()
    {
        SelectedProjectData = new Project();
    }

型号:

public class Project : INotifyPropertyChanged
{
    private DateTime _projectStartDate;

    public DateTime ProjectStartDate
    {
        get { return _projectStartDate; }
        set
        {
            _projectStartDate = value;
            RaisePropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void RaisePropertyChanged([CallerMemberName] string caller = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(caller));
    }
}

编辑:XAML 绑定到不可为空的日期时间,但我在同一设置中有其他日期选择器绑定到可空的日期时间,它们也不起作用。

【问题讨论】:

  • DatePicker 的 DataContext 是什么?而且您的 ViewModel 甚至不会编译,所以谁知道那里实际发生了什么。项目看起来正确。
  • 另外,给你一份 Snoop。您可以在运行时轻松调查绑定错误。
  • SelectedProjectData 是公共财产吗?您的视图的 DataContext 是否设置为 PSViewModel 的实例?

标签: c# xaml mvvm datepicker


【解决方案1】:

该属性是SelectedDate,而不是Text

当我还是一个饥饿的小伙子,在帕洛阿尔托无法无天、肮脏、迷宫般的小巷里无家可归和野蛮长大的时候,我曾经遇到过一个古老的、垂死的独眼乞丐。他用铁爪般的铁爪握住我纤细的小手臂,将我拉近,并用他最后的嘶哑呼吸将所有尘世智慧的根源传授给我:

Read... the... documentation...

他看起来和马蒂·费尔德曼一模一样。

【讨论】:

  • 公平点。谢谢你,埃德。虽然,我希望你能看到我的困惑,即使我是一个勤奋的文档学生......“文本:获取 DatePicker 显示的文本,或设置选定的日期。”和... “SelectedDate:获取或设置当前选定的日期。”他们是如此接近,我希望我能避免鞭打。 :) 感谢您的帮助。
  • @DocHoss 是的,这绝对不是最清楚的。我的女朋友说“文件很烂”
  • 听起来像个聪明的女士。再次感谢 Ed。
【解决方案2】:

查看:

<StackPanel Orientation="Horizontal">
    <DatePicker SelectedDate="{Binding SelectedDate, 
        UpdateSourceTrigger=PropertyChanged}"
        DisplayDateStart="{Binding StartDate}" DisplayDateEnd="{Binding EndDate}"/>
    <Label Content="{Binding SelectedDate}"/>
</StackPanel>

视图模型

   public class MainWindowViewModel : INotifyPropertyChanged
    {
        private string _selectedDate;
        public string SelectedDate
        {
            get
            {
                return _selectedDate;
            }
            set
            {
                _selectedDate = value;
                RaisePropertyChanged();
            }
        }

        public DateTime StartDate { get; set; }
        public DateTime EndDate { get; set; }

        public MainWindowViewModel()
        {
            StartDate = new DateTime(2020, 1, 1);
            EndDate = new DateTime(2020, 3, 31);
        }

        public event PropertyChangedEventHandler PropertyChanged;
        public void RaisePropertyChanged([CallerMemberName] string property = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2018-07-27
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多