[英]WPF Application Using MVVM
問題:使用MVVM創建一個簡單的WPF應用程序,該應用程序應在當年的每一天顯示一個按鈕並顯示一個日期,然后單擊按鈕應顯示帶有星期幾名稱的消息。
解決方案:我已經創建了該應用程序並成功運行,但是從代碼角度來看它看起來並不出色。
型號代碼:
public class DateDataModel : INotifyPropertyChanged
{
DateTime FirstDate= new DateTime( DateTime.Now.Year, DateTime.Now.Month, 1);
public string Now
{
get { return FirstDate.ToShortDateString(); }
set
{
Now = value;
OnPropertyChanged("Now");
}
}
public string Now1
{
get { return FirstDate.AddDays(1).ToShortDateString(); }
set
{
Now1 = value;
OnPropertyChanged("Now1");
}
}
public string Now2
{
get { return FirstDate.AddDays(1).ToShortDateString(); }
set
{
Now2 = value;
OnPropertyChanged("Now2");
}
}
public string Now3
{
get { return FirstDate.AddDays(3).ToShortDateString(); }
set
{
Now5 = value;
OnPropertyChanged("Now3");
}
}
public string Now4
{
get { return FirstDate.AddDays(4).ToShortDateString(); }
set
{
Now4 = value;
OnPropertyChanged("Now4");
}
}
public string Now5
{
get { return FirstDate.AddDays(5).ToShortDateString(); }
set
{
Now5 = value;
OnPropertyChanged("Now5");
}
}
public string Now6
{
get { return FirstDate.AddDays(6).ToShortDateString(); }
set
{
Now6 = value;
OnPropertyChanged("Now6");
}
}
public string Now7
{
get { return FirstDate.AddDays(7).ToShortDateString(); }
set
{
Now7 = value;
OnPropertyChanged("Now7");
}
}
public string Now8
{
get { return FirstDate.AddDays(8).ToShortDateString(); }
set
{
Now1 = value;
OnPropertyChanged("Now8");
}
}
public string Now9
{
get { return FirstDate.AddDays(9).ToShortDateString(); }
set
{
Now1 = value;
OnPropertyChanged("Now9");
}
}
public string Now10
{
get { return FirstDate.AddDays(10).ToShortDateString(); }
set
{
Now3 = value;
OnPropertyChanged("Now10");
}
}
public string Now11
{
get { return FirstDate.AddDays(11).ToShortDateString(); }
set
{
Now1 = value;
OnPropertyChanged("Now11");
}
}
public string Now12
{
get { return FirstDate.AddDays(12).ToShortDateString(); }
set
{
Now1 = value;
OnPropertyChanged("Now112");
}
}
public string Now13
{
get { return FirstDate.AddDays(13).ToShortDateString(); }
set
{
Now1 = value;
OnPropertyChanged("Now13");
}
}
public string Now14
{
get { return FirstDate.AddDays(14).ToShortDateString(); }
set
{
Now1 = value;
OnPropertyChanged("Now14");
}
}
public string Now15
{
get { return FirstDate.AddDays(15).ToShortDateString(); }
set
{
Now15 = value;
OnPropertyChanged("Now15");
}
}
public string Now16
{
get { return FirstDate.AddDays(16).ToShortDateString(); }
set
{
Now16 = value;
OnPropertyChanged("Now16");
}
}
public string Now17
{
get { return FirstDate.AddDays(17).ToShortDateString(); }
set
{
Now17 = value;
OnPropertyChanged("Now17");
}
}
public string Now18
{
get { return FirstDate.AddDays(18).ToShortDateString(); }
set
{
Now18 = value;
OnPropertyChanged("Now18");
}
}
public string Now19
{
get { return FirstDate.AddDays(19).ToShortDateString(); }
set
{
Now19 = value;
OnPropertyChanged("Now19");
}
}
public string Now20
{
get { return FirstDate.AddDays(20).ToShortDateString(); }
set
{
Now20= value;
OnPropertyChanged("Now20");
}
}
public string Now21
{
get { return FirstDate.AddDays(21).ToShortDateString(); }
set
{
Now21 = value;
OnPropertyChanged("Now21");
}
}
public string Now22
{
get { return FirstDate.AddDays(22).ToShortDateString(); }
set
{
Now22 = value;
OnPropertyChanged("Now22");
}
}
public string Now23
{
get { return FirstDate.AddDays(23).ToShortDateString(); }
set
{
Now23 = value;
OnPropertyChanged("Now23");
}
}
public string Now24
{
get { return FirstDate.AddDays(24).ToShortDateString(); }
set
{
Now24 = value;
OnPropertyChanged("Now24");
}
}
public string Now25
{
get { return FirstDate.AddDays(25).ToShortDateString(); }
set
{
Now25 = value;
OnPropertyChanged("Now25");
}
}
public string Now26
{
get { return FirstDate.AddDays(26).ToShortDateString(); }
set
{
Now26 = value;
OnPropertyChanged("Now26");
}
}
public string Now27
{
get { return FirstDate.AddDays(27).ToShortDateString(); }
set
{
Now27 = value;
OnPropertyChanged("Now27");
}
}
public string Now28
{
get { return FirstDate.AddDays(28).ToShortDateString(); }
set
{
Now28 = value;
OnPropertyChanged("Now28");
}
}
public string Now29
{
get { return FirstDate.AddDays(29).ToShortDateString(); }
set
{
Now29 = value;
OnPropertyChanged("Now29");
}
}
public string Now30
{
get { return FirstDate.AddDays(30).ToShortDateString(); }
set
{
Now30 = value;
OnPropertyChanged("Now30");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}
查看型號代碼:
public class ButtonViewModel
{
private DateDataModel _dateModel;
public ButtonViewModel()
{
_dateModel = new DateDataModel();
}
public DateDataModel Dates
{
get { return _dateModel; }
set { _dateModel = value; }
}
private ICommand mUpdater;
public ICommand UpdateCommand
{
get
{
if (mUpdater == null)
mUpdater = new DateUpdater(this);
return mUpdater;
}
set
{
mUpdater = value;
}
}
private class DateUpdater : ICommand
{
#region ICommand Members
ButtonViewModel _obj;
public DateUpdater(ButtonViewModel obj)
{
_obj = obj;
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
if (parameter == null) return;
Button clickedbutton = parameter as Button;
DateTime dt = DateTime.MinValue;
switch (clickedbutton.Name.ToString())
{
case "btnUpdate":
dt = Convert.ToDateTime(_obj.Dates.Now.ToString());
break;
case "btnUpdate1":
dt = Convert.ToDateTime(_obj.Dates.Now1.ToString());
break;
case "btnUpdate2":
dt = Convert.ToDateTime(_obj.Dates.Now2.ToString());
break;
case "btnUpdate3":
dt = Convert.ToDateTime(_obj.Dates.Now3.ToString());
break;
case "btnUpdate4":
dt = Convert.ToDateTime(_obj.Dates.Now4.ToString());
break;
case "btnUpdate5":
dt = Convert.ToDateTime(_obj.Dates.Now5.ToString());
break;
case "btnUpdate6":
dt = Convert.ToDateTime(_obj.Dates.Now6.ToString());
break;
case "btnUpdate7":
dt = Convert.ToDateTime(_obj.Dates.Now7.ToString());
break;
case "btnUpdate8":
dt = Convert.ToDateTime(_obj.Dates.Now8.ToString());
break;
case "btnUpdate9":
dt = Convert.ToDateTime(_obj.Dates.Now9.ToString());
break;
case "btnUpdate10":
dt = Convert.ToDateTime(_obj.Dates.Now10.ToString());
break;
case "btnUpdate11":
dt = Convert.ToDateTime(_obj.Dates.Now11.ToString());
break;
case "btnUpdate12":
dt = Convert.ToDateTime(_obj.Dates.Now12.ToString());
break;
case "btnUpdate13":
dt = Convert.ToDateTime(_obj.Dates.Now13.ToString());
break;
case "btnUpdate14":
dt = Convert.ToDateTime(_obj.Dates.Now14.ToString());
break;
case "btnUpdate15":
dt = Convert.ToDateTime(_obj.Dates.Now15.ToString());
break;
case "btnUpdate16":
dt = Convert.ToDateTime(_obj.Dates.Now16.ToString());
break;
case "btnUpdate17":
dt = Convert.ToDateTime(_obj.Dates.Now17.ToString());
break;
case "btnUpdate18":
dt = Convert.ToDateTime(_obj.Dates.Now18.ToString());
break;
case "btnUpdate19":
dt = Convert.ToDateTime(_obj.Dates.Now19.ToString());
break;
case "btnUpdate20":
dt = Convert.ToDateTime(_obj.Dates.Now20.ToString());
break;
case "btnUpdate21":
dt = Convert.ToDateTime(_obj.Dates.Now21.ToString());
break;
case "btnUpdate22":
dt = Convert.ToDateTime(_obj.Dates.Now22.ToString());
break;
case "btnUpdate23":
dt = Convert.ToDateTime(_obj.Dates.Now23.ToString());
break;
case "btnUpdate24":
dt = Convert.ToDateTime(_obj.Dates.Now24.ToString());
break;
case "btnUpdate25":
dt = Convert.ToDateTime(_obj.Dates.Now25.ToString());
break;
case "btnUpdate26":
dt = Convert.ToDateTime(_obj.Dates.Now26.ToString());
break;
case "btnUpdate27":
dt = Convert.ToDateTime(_obj.Dates.Now27.ToString());
break;
case "btnUpdate28":
dt = Convert.ToDateTime(_obj.Dates.Now28.ToString());
break;
case "btnUpdate29":
dt = Convert.ToDateTime(_obj.Dates.Now29.ToString());
break;
case "btnUpdate30":
dt = Convert.ToDateTime(_obj.Dates.Now30.ToString());
break;
}
System.Windows.MessageBox.Show(dt.ToString("ddd"));
}
有人可以建議我為這種方法提供更好的方法嗎,我認為我們需要自定義現有日歷
我可能會顯示ItemsItem是DateTime列表的ItemsControl,並在DateTime上創建一個DataTemplate來顯示一個按鈕。
XAML:
<ItemsControl ItemsSource="{Binding ListOfDates, Mode=OneWay}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type DateTime}">
<Button Click="ClickHandler">
<TextBlock Text="{Binding StringFormat={}{0:D}}"/>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
返回cs:
public void ClickHandler(Object sender, MouseEventArgs args) {
DateTime correspondingDate = (DateTime)((Button)sender).DataContext;
MessageBox.Show(CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(correspondingDate.DayOfWeek));
}
ViewModel:
public class YourVM {
public YourVM() {
int startYear = DateTime.Now.Year;
DateTime currentDate = new DateTime(startYear, 1, 1);
while(currentDate.Year == startYear) {
_listOfDates.Add(currentDate);
currentDate = currentDate.AddDays(1);
}
}
private List<DateTime> _listOfDates = new List<DateTime>(365);
public List<DateTime> ListOfDates { get { return _listOfDates; } }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.