gpt4 book ai didi

wpf - 仅在 WPF MVVM 中的两个 View 之间进行通信

转载 作者:行者123 更新时间:2023-12-03 11:00:40 24 4
gpt4 key购买 nike

我在 MVVM(WPF) 中有两个 View 。第一个 View 包含两个文本框:用户名、密码,第二个 View 有两个按钮:提交和清除。两个 View 现在都设置在表单上。当我按下“清除”按钮时,两个文本框都被清除,并在提交中显示用户名和密码的消息。我只使用 MVVM+WPF,而不是棱镜。

第一个 View 的模型 View :

class LoginView:ViewModelBase
{
string _userName;
public string UserName
{
get {return _userName ; }
set {
if (_userName != value)
{
_userName = value;
}
base.OnPropertyChanged(UserName);
}
}

string _Pwd;
public string PWD
{
get { return _Pwd; }
set
{

_Pwd = value;
base.OnPropertyChanged(_Pwd);
}
}
}

和按钮
 class ButtonHandler
{
private DelegateCommand _ClearData;
public ICommand ClearCommand
{
get
{
if (_ClearData == null)
{
_ClearData = new DelegateCommand(ClearText);
}
return _ClearData;
}
}
LoginView lg = new LoginView();
private void ClearText()
{
lg.UserName = "";
lg.PWD = "";
}
}

并查看First Control的代码
   <Label Content="Login" Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left"
FontFamily="Georgia" FontSize="24" FontWeight="UltraBold" ></Label>
<Label Content="User Name" Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Left"></Label>
<Label Content="Password" Grid.Row="2" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Left"></Label>
<TextBox Name="username" Grid.Row="1" Grid.Column="1" Margin="100,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Left" Text="{Binding Path=UserName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" ></TextBox>
<TextBox Name="pwd" Grid.Row="2" Grid.Column="1" Margin="100,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Left" Text="{Binding Path=PWD,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox>
<Separator Grid.Row="0" Grid.Column="1" Height="5" Margin="0,40,0,0" Background="Green"></Separator>

和按钮 View
     <Button x:Name="Submit" Content="Submit" Grid.Column="1"></Button>
<Button x:Name="Clear" Content="Clear" Grid.Column="2"
Command="{Binding Path=ClearCommand, Mode=OneWay,
UpdateSourceTrigger=PropertyChanged}" >
</Button>

为什么它不工作?

最佳答案

您没有正确使用 MVVM 模式,在这种模式下,ViewModel 不应该有对 View 的引用。命令是您的 ViewModel 的一部分,因此您对 LoginView 的引用违反模式。

所以你有两个输入字段和一个按钮?为此,我将拥有一个 ViewModel 和一个 View。 ViewModel 将公开两个字符串属性(用户名和密码)和一个绑定(bind)到清除按钮的命令。当命令执行时,它将清除 ViewModel 上的用户名和密码文本。然后 View 将相应更新。

关于wpf - 仅在 WPF MVVM 中的两个 View 之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6812377/

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