ATM 我正在尝试掌握 MVVM、数据绑定和命令。我正在尝试(重新)使用该模式创建游戏菜单。我有几个问题。
1) 现在我在应用程序模型中有按钮内容(Party Paradigms 等),并从我的 UI 按钮绑定到它。但由于这更像是一种 UI 类的东西,我想知道这是否是处理事情的正确方法。
我的想法是这会更容易,因为只要我进入子菜单(例如数据日志),我就会更改属性,并且按钮内容会自动更改。你会怎么处理?
2)时钟图标旁边的标签应该是一个计数器。同样,您会将这种逻辑放在 VM 或 xaml.cs 文件中吗?
我也遇到了 StopWatch 和 INotifyPropertyChanged 接口的一些问题。现在我的 xaml.cs 文件中有 Stopwatch 方法:
MainMenuVM mvm = new MainMenuVM();
public MainWindow()
{
InitializeComponent();
DataContext = mvm;
Thread thread = new Thread(StopWatch);
thread.Start();
}
public void StopWatch()
{
int secs = 0, mins = 0, hours = 0;
while (true)
{
secs++;
if (secs == 60)
{
mins++;
secs = 0;
}
if (mins == 60)
{
hours++;
mins = 0;
}
if (mins >= 10 && secs < 10)
{
mvm.Stopwatch = "0" + hours + ":" + mins + ":" + "0" + secs;
}
if (mins >= 10 && secs >= 10)
{
mvm.Stopwatch = "0" + hours + ":" + mins + ":" + secs;
}
if (mins < 10 && secs >= 10)
{
mvm.Stopwatch = "0" + hours + ":" + "0" + mins + ":" + secs;
}
if (mins < 10 && secs < 10)
{
mvm.Stopwatch = "0" + hours + ":" + "0" + mins + ":" + "0" + secs;
}
Thread.Sleep(1000);
}
}
而且我的时间标签内容绑定到 mvm.Stopwatch 属性。
<Label x:Name="lblTime" Content="{Binding Stopwatch}" />
秒表属性:
public string Stopwatch
{
get
{
if (_stopwatch == null)
{
_stopwatch = "00:00:00";
}
return _stopwatch;
}
set { _stopwatch = value; YouChanged("Stopwatch"); // Calling the INotify event
}
}
但由于某种原因,我得到了一个很好的旧“对象引用未设置为对象的实例”。每当我到达秒表设置器并调用事件时。