gpt4 book ai didi

wpf - MVVM ViewModel 查看消息

转载 作者:行者123 更新时间:2023-12-05 00:07:37 25 4
gpt4 key购买 nike

MVVM 问题。
ViewModel 和 View 之间的消息传递,如何最好地实现?

该应用程序有一些“用户交流”点,例如:“您已为此选择输入评论。当 Yes/No/NA 选择的值发生变化时,您希望保存还是丢弃”。
所以我需要一些禁止的 View 绑定(bind)到 ViewModel 的“消息”的方式。

我从 MVVM Foundation 的 Messenger 开始。然而,这更多的是系统范围的广播,而不是事件/订阅者模型。因此,如果应用程序打开了两个 View 实例(Person1 EditView 和 Person2 EditView),那么当一个 ViewModel 发布“你想保存”消息时,它们都会收到消息。

你用了什么方法?

谢谢
安迪

最佳答案

对于所有这些,您将使用绑定(bind)作为“通信”的方法。例如,可能会根据您在 ViewModel 中设置的属性显示或隐藏确认消息。

这是 View

<Window.Resources>
<BoolToVisibilityConverter x:key="boolToVis" />
</Window.Resources>
<Grid>

<TextBox Text="{Binding Comment, Mode=TwoWay}" />
<TextBlock Visibility="{Binding IsCommentConfirmationShown,
Converter={StaticResource boolToVis}"
Text="Are you sure you want to cancel?" />

<Button Command="CancelCommand" Text="{Binding CancelButtonText}" />
</Grid>

这是你的 ViewModel
// for some base ViewModel you've created that implements INotifyPropertyChanged
public MyViewModel : ViewModel
{
//All props trigger property changed notification
//I've ommited the code for doing so for brevity
public string Comment { ... }
public string CancelButtonText { ... }
public bool IsCommentConfirmationShown { ... }
public RelayCommand CancelCommand { ... }


public MyViewModel()
{
CancelButtonText = "Cancel";
IsCommentConfirmationShown = false;
CancelCommand = new RelayCommand(Cancel);
}

public void Cancel()
{
if(Comment != null && !IsCommentConfirmationShown)
{
IsCommentConfirmationShown = true;
CancelButtonText = "Yes";
}
else
{
//perform cancel
}
}
}

这不是一个完整的示例(唯一的选择是肯定的!:)),但希望这说明您的 View 和您的 ViewModel 几乎是一个实体,而不是两个互相打电话的实体。

希望这可以帮助。

关于wpf - MVVM ViewModel 查看消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1981166/

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