将ViewModel类链接到视图
本文关键字:视图 链接 ViewModel | 更新日期: 2023-09-27 18:11:42
我正在做一个小的WPF MVVM程序:
- 有一个带有标签的主窗口(说"Hello")和一个打开另一个窗口的按钮(我在后面的代码中做了打开窗口的部分)。
- 这打开了另一个窗口,有2个单选按钮(红色和蓝色)和一个取消按钮(我在后面的代码中关闭了函数)。 如果我按下红色单选按钮,主窗口上的标签应该变成红色,类似地按下蓝色单选按钮。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using System.Windows.Media;
using PocMVVM.Views;
namespace PocMVVM.ViewModel
{
public class ColorChangeViewModel : ICommand
{
//ColorChoiceView colorSelect = new ColorChoiceView();
//MainWindow mw = new MainWindow();
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
return true;
//throw new NotImplementedException();
}
public void Execute(object parameter)
{
//throw new NotImplementedException();
ColorChoiceView colorSelect = new ColorChoiceView();
MainWindow mw = new MainWindow();
if((bool)parameter==colorSelect.RedButton.IsChecked.Equals(true))
{
mw.label.Foreground = Brushes.Red;
mw.UpdateLayout();
mw.ShowDialog();
}
else if((bool)parameter == colorSelect.BlueButton.IsChecked.Equals(true))
{
mw.label.Foreground = Brushes.Blue;
mw.UpdateLayout();
mw.ShowDialog();
}
}
}
}
有人能帮我一下吗?非常感谢!!
注:我知道人们可能会问是否需要两个窗户,但必须这样做。我被告知必须是这样的,所以没有别的办法。
首先,在视图模型中不应该有对视图的引用。根据MVVM模式,应该将视图的DataContext设置为视图模型,但是视图模型不应该知道视图的任何信息。如果您希望命令打开一个窗口,可以使用services。看看这个:在MVVM WPF中打开新窗口
此外,您可以绑定到前景颜色。在你的视图模型中,你应该有这样的东西:
public System.Windows.Media.Brush ForegroundColor
{
get { return _foregroundColor; }
set
{
_foregroundColor = value;
OnPropertyChanged("ForegroundColor");
}
}
在XAML中使用Hello标签:
<TextBlock Foreground="{Binding Path=ForegroundColor, Mode=TwoWay}" />
对于单选按钮,当你在两种颜色之间切换时,你应该有一个iccommand来响应,并进一步将你的属性ForegroundColor设置为这个值。像这样(在XAML中):
<RadioButton Content="Red" Command="{Binding SwitchButtonCommand}" CommandParameter="Red" />
<RadioButton Content="Blue" Command="{Binding SwitchButtonCommand}" CommandParameter="Blue" />
在SwitchButtonCommand命令的实现中,可以根据参数将ForegroundColor设置为红色或蓝色。