gpt4 book ai didi

c# - 如何将 DatePicker 中的 SelectedDateChanged 事件绑定(bind)到 VM 中的命令

转载 作者:行者123 更新时间:2023-11-30 14:17:30 25 4
gpt4 key购买 nike

我有一个带有空代码隐藏文件的 wpf 文件(如果可能的话,我想将代码隐藏保持为空)

http://pastebin.com/x1CTZDFK

然后我有了这个 View 模型文件

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 事件执行我的公共(public) ICommand DateSelectionChanged_cmd,以便我可以在我的 View 模型中验证它。我尝试让 System.Windows.Interactivity 工作但是当我将它添加为引用时它不会编译并说它找不到文件,所以现在我想知道是否有任何其他方法可以做到这一点,就像我写的那样xml 文件只是我猜测它的外观的一个示例(这是错误的方式)

最佳答案

您不能将事件直接绑定(bind)到命令。您可以使用如图所示的附加行为 here , 但实际上你不需要:因为绑定(bind) SelectedDate是双向的,你只需要执行DateSelectionChangedExecuteSelectedDate 的二传手中属性:

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

关于c# - 如何将 DatePicker 中的 SelectedDateChanged 事件绑定(bind)到 VM 中的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5756307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com