我正在做一个小型的WPF MVVM程序:
有人可以帮我这个吗?我是WPF的新手,也是MVVM方法的新手。我发布了我的ViewModel代码:
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();
}
}
}
}
有人可以帮我这个吗?
非常感谢!!
P.S。我知道人们可能会问两个窗户是否需要,但必须这样。我被告知它必须是这样的,所以别无他法。
答案 0 :(得分:0)
首先,您不应该在viewmodel中引用该视图。根据MVVM模式,您应该将视图的DataContext设置为viewmodel,但viewmodel应该不知道视图。 如果您希望命令打开一个窗口,则可以使用服务。看看这个:Opening new window in MVVM WPF
此外,您可以绑定前景色。在你的viewmodel中你应该有这样的东西:
public System.Windows.Media.Brush ForegroundColor
{
get { return _foregroundColor; }
set
{
_foregroundColor = value;
OnPropertyChanged("ForegroundColor");
}
}
在带有Hello标签的XAML中:
<TextBlock Foreground="{Binding Path=ForegroundColor, Mode=TwoWay}" />
对于单选按钮,当你在两种颜色之间切换时,你应该有一个ICommand来响应,并进一步将你的属性ForegroundColor设置为这个值。像这样(在XAML中):
<RadioButton Content="Red" Command="{Binding SwitchButtonCommand}" CommandParameter="Red" />
<RadioButton Content="Blue" Command="{Binding SwitchButtonCommand}" CommandParameter="Blue" />
在SwitchButtonCommand命令的实现中,您可以将ForegroundColor设置为红色或蓝色,具体取决于参数。