Как мне привязать событие SelectedDateChanged из DatePicker к команде в моей виртуальной машине

#c# #.net #wpf

#c# #.net #wpf

Вопрос:

У меня есть этот файл wpf с пустым файлом codebehind (И я хотел бы оставить codebehind пустым, если это возможно)

http://pastebin.com/x1CTZDFK

И тогда у меня будет этот файл viewmodel

 using System;
using System.Collections.ObjectModel;
using System.Windows.Input;
using MVVM_Test.Model;
using MvvmFoundation.Wpf;

namespace MVVM_Test.ViewModel
{
    public class ViewModel : ObservableObject
    {
        private DateTime selectedDate;
        public DateTime SelectedDate
        {
            get
            {
                return selectedDate;
            }
            set
            {
                selectedDate = value;
                RaisePropertyChanged("SelectedDate");
            }
        }

        private DateTime startDate;
        public DateTime StartDate
        {
            get { return startDate; }
            set
            {
                startDate = value;
                RaisePropertyChanged("StartDate");
            }
        }

        private DateTime endDate;
        public DateTime EndDate
        {
            get { return endDate; }
            set
            {
                endDate = value;
                RaisePropertyChanged("EndDate");
            }
        }

        public ObservableCollection<Brick> SavedBricks { get; set; }

        public ViewModel()
        {
            SelectedDate = DateTime.Now;
            StartDate = new DateTime(2011, 1, 1);
            EndDate = new DateTime(2011, 7, 31);
            SavedBricks = new ObservableCollection<Brick>();
            //Brick b1 = new Brick(DateTime.Now, 50,50,50,300);
            //SavedBricks.Add(b1);
        }

        public ICommand PrevHistory_cmd
        {
            get { return new RelayCommand(PrevHistoryExecute, PrevHistoryCanExecute); }
        }

        private void PrevHistoryExecute()
        {
            SelectedDate = SelectedDate - new TimeSpan(1, 0, 0, 0);
        }

        private bool PrevHistoryCanExecute()
        {
            if (StartDate < SelectedDate)
                return true;
            return false;
        }

        public ICommand NextHistory_cmd
        {
            get { return new RelayCommand(NextHistoryExecute, NextHistoryCanExecute); }
        }

        private void NextHistoryExecute()
        {
            SelectedDate = SelectedDate   new TimeSpan(1, 0, 0, 0);
        }

        private bool NextHistoryCanExecute()
        {
            if(EndDate > SelectedDate)
                return true;
            return false;
        }

        public ICommand StartStopSort_cmd
        {
            get { return new RelayCommand(NextHistoryExecute, NextHistoryCanExecute); }
        }

        private void StartStopSortExecute()
        {

        }

        private bool StartStopSortCanExecute()
        {
            return true;
        }

        public ICommand DateSelectionChanged_cmd
        {
            get { return new RelayCommand(NextHistoryExecute, NextHistoryCanExecute); }
        }

        private void DateSelectionChangedExecute()
        {

        }

        private bool DateSelectionChangedCanExecute()
        {
            return true;
        }
    }
}
  

Затем я хочу, чтобы событие SelectedDateChanged выполнило мою общедоступную ICommand DateSelectionChanged_cmd, чтобы я мог проверить его в моей модели представления. Я попытался получить систему.Windows.Интерактивность для работы, но когда я добавляю его в качестве ссылки, оно не компилируется и сообщает, что не может найти файл, поэтому теперь мне интересно, есть ли какой-либо другой способ сделать это, то, как я написал это в xml-файле, является просто примером того, как я предполагаю, что это будет выглядеть (что является неправильным способом)

Ответ №1:

Вы не можете привязать событие непосредственно к command. Вы могли бы использовать прикрепленное поведение, как показано здесь, но на самом деле вам это не нужно: поскольку привязка SelectedDate двусторонняя, вам просто нужно выполнить DateSelectionChangedExecute в параметре SelectedDate свойства:

     public DateTime SelectedDate
    {
        get
        {
            return selectedDate;
        }
        set
        {
            selectedDate = value;
            RaisePropertyChanged("SelectedDate");
            DateSelectionChangedExecute();
        }
    }