gpt4 book ai didi

c# - 当 View 被渲染/实例化时通知 ViewModel

转载 作者:太空狗 更新时间:2023-10-30 00:07:12 25 4
gpt4 key购买 nike

我有一个自定义用户控件 (ChartControl),我在我的 WPF 应用程序 (MainApp) 中使用它,我将其呈现如下:

<ContentControl Grid.Row="1" Content="{Binding ChartControl, Mode=OneWay}" />

启动 MainApp 后,将按给定顺序执行以下操作:

主应用 View 主应用 View 模型图表控件 View 模型图表控件 View

我从 MainApp ViewModel 的构造函数中实例化了 ChartControl ViewModel。问题是在实例化 ChartControl ViewModel 之后,我还需要从 MainApp 中调用 ChartControl 的方法。

我遇到的问题是,在调用该方法作为其 View 模型的一部分之前,我需要呈现 ChartControl View (执行其 InitializeComponent)。

我认为一种解决方案是在完全实例化和设置时从 View 通知 View 模型。这是一个可行的解决方案吗?如果是,我该怎么做?

总而言之,我需要在调用匹配 View 模型的方法之前完全设置 View 。我遇到的问题是,在这种情况下,首先实例化 View 模型,然后才呈现 View 。

有什么想法吗?

谢谢

最佳答案

您可以使用交互触发器在任何 UI 事件上触发 VM 上的命令

您可以像下面这样监听 UserControl 的 Loaded 事件并将其绑定(bind)到您的 VM 上的命令:

<UserControl x:Class="Test.TestView.MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
x:Name="myControl" >

<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding ElementName=myControl, Path=OnLoadedCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>

确保您的虚拟机中有命令

public ICommand OnLoadedCommand { get; private set; }

public MyUserControl()
{
OnLoadedCommand = new DelegateCommand(OnLoaded);
}

public void OnLoaded()
{
}

关于c# - 当 View 被渲染/实例化时通知 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29822725/

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