gpt4 book ai didi

c# - MVVM wpf在 View 模型之间传递参数

转载 作者:行者123 更新时间:2023-12-03 10:27:05 24 4
gpt4 key购买 nike

我正在构建一个具有以下设计的应用程序:
具有3个“子” View 的MainWindowView

  • ProjectView
  • ContentView
  • 属性查看3

  • 以下是解释该 View 的图像的链接。

    MainWindowView

    这些 View 是单独的Usercontrols,每个 View 都有自己的ViewModel。 View 在XAML中声明。
    <Grid x:Name="mainGrid" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"  Margin="0">
    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="300"/>
    <ColumnDefinition Width="600*"/>
    <ColumnDefinition Width="300"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
    <RowDefinition Height="auto"/>
    <RowDefinition Height="300*"/>
    <RowDefinition Height="auto"/>
    </Grid.RowDefinitions>

    <GridSplitter Grid.Row="1" Grid.Column="0" HorizontalAlignment="Right" Width="3"/>
    <GridSplitter Grid.Row="1" Grid.Column="2" HorizontalAlignment="Left" Width="3"/>

    <Menu x:Name="MainMenu" IsMainMenu="True" Grid.ColumnSpan="3" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
    <MenuItem Header="_File" >
    <MenuItem Header="_New..." />
    <Separator />
    <MenuItem Header="_Open..." />
    <Separator />
    <MenuItem Header="_Save" />
    <MenuItem Header="_Save As..." />
    <Separator />
    <MenuItem Header="_Exit"/>
    </MenuItem>
    <MenuItem Header="_Edit">
    <MenuItem Header="_Cut" Command="Cut">
    </MenuItem>
    <MenuItem Header="_Copy" Command="Copy">
    </MenuItem>
    <MenuItem Header="_Paste" Command="Paste">
    </MenuItem>
    </MenuItem>
    <MenuItem Header="_Canvas" />
    <MenuItem Header="_View" />
    <MenuItem Header="_Window" />
    <MenuItem Header="_Help" />
    </Menu>

    <View:ProjectView x:Name="projectView" Grid.Row="1" Grid.Column="0" Margin="-1,0,2,0"/>

    <View:ContentView x:Name="contentView" Grid.Row="1" Grid.Column="1"/>

    <View:PropertiesView x:Name="propertiesView" Grid.Row="1" Grid.Column="2" Margin="2,0,-1,0"/>

    <StatusBar x:Name="statusBar" Grid.ColumnSpan="3" Grid.Row="2">
    <Label x:Name="labelStatus" Content="status" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Width="auto"/>
    </StatusBar>

    </Grid>

    如何在viewModels之间发送参数?例如:我在ProjectView中有一个列表框,当我选择一个项目时,我想在PropertiesView中更改所选项目的属性。或在MainWindowView的菜单中,我想创建一个新项目并将其添加到projectView的列表中。

    编辑:
    我已经在寻找答案,但是找不到适合我问题的解决方案。

    最佳答案

    要在viewModel之间传递对象,您可以使用“信使”,它基于C#事件,并且允许您在类之间传递对象。
    例如,在MVVM light中,实现了一个Messenger系统,允许您以这种方式发送/接收对象。

    // Sends a message with a user object from ViewModel 1
    User user = new user { Name = "testName" };
    Messenger.Default.Send(user);

    // Receive the user object in ViewModel 2
    Messenger.Default.Register<User>(this, (user) =>
    {
    // use "user" object
    });

    Here是使用MVVM光源的一些示例。

    关于c# - MVVM wpf在 View 模型之间传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37677028/

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