#c# #.net #wpf
#c# #.net #wpf
Вопрос:
У меня есть этот файл wpf с пустым файлом codebehind (И я хотел бы оставить codebehind пустым, если это возможно)
И тогда у меня будет этот файл 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();
}
}