在桌面版 PivoItems 之间发送列表视图

本文关键字:列表 视图 之间 桌面 PivoItems | 更新日期: 2023-09-27 18:30:38

我正在做一个项目,我有一个透视,这个透视有两个透视项。第一个叫利斯塔,第二个叫卡里尼奥。在第一个中,我有一个列表视图来存储产品,并且我绑定到我的产品视图模型。当我选择一个按钮时,他会显示浮出控件的产品,我想要的是当我单击该浮出控件上的按钮时,我在产品上拥有的所有数据都将发送到第二个透视项,我不知道该怎么做,主要是因为第一个透视项绑定到 productviewmodel,第二个需要绑定到其他视图模型,因为第二个PivotItem 将是产品的订单,我认为也许我只需要发送产品的 ID,因为它们在这两个表(产品和订单)之间的数据库中相关,或者只是将数据复制到新的 ObservableCollection。

这是我在 xaml 中的代码,可以更好地解释。

    <Pivot Grid.Column="1">
        <PivotItem Header="Lista">
            <ListView x:Name="List1" ItemsSource="{x:Bind ProdutoViewModel.Produtos}" Height="550" SelectionChanged="List1_SelectionChanged">
                <ListView.ItemTemplate>
                    <DataTemplate x:DataType="list:Produto">
                        <ListView FlyoutBase.AttachedFlyout="{StaticResource FlyoutBase1}" RightTapped="StackPanel_RightTapped">
                            <Button x:Name="CarrButton">
                                <Image Source="/Assets/cart.png" Height="20"/>
                                <Button.Flyout>
                                    <Flyout>
                                        <StackPanel>
                                            <TextBlock Style="{StaticResource BaseTextBlockStyle}">
                                                Adicionar este produto?
                                            </TextBlock>
                                            <Button Click="CarrConfirmation_Click">
                                                Carrinho
                                            </Button>
                                        </StackPanel>
                                    </Flyout>
                                </Button.Flyout>
                            </Button>
                            <StackPanel>
                                <TextBlock Text="{x:Bind Nome}" Margin="100,10,10,10"/>
                                <TextBlock Text="{x:Bind Preco}" Margin="100,10,10,10"/>
                                <TextBlock Text="{x:Bind Disponivel}" Margin="100,10,10,10"/>
                                <TextBlock Text="{x:Bind Fornecedor}" Margin="100,10,10,10"/>
                                <TextBlock Text="{x:Bind Categoria}" Margin="100,10,10,10"/>
                            </StackPanel>
                        </ListView>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </PivotItem>
        <PivotItem Header="Carrinho">
            <ListView x:Name="Cart" ItemsSource="{Binding EncomendaViewModel.Encomendas}" Height="550">
                <ListView.ItemTemplate>
                    <DataTemplate x:DataType="list:Produto">
                        <StackPanel>
                            <TextBlock Text="dasfas"></TextBlock>

                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </PivotItem>
    </Pivot>

谢谢

在桌面版 PivoItems 之间发送列表视图

解决方案 1

MVVM Light的Messenger组件允许在我们应用程序的类之间传递数据。下面是如何实现它的示例。不要忘记在项目中添加 mvvmlight nuget 包。

// Sends a notification message with a Person as content in ProdutoViewModel.
var produto = new Produto { ProdutoName = "fuu", ProdutoPrice = 78 };
Messenger.Default.Send(new NotificationMessage<Produto>(produto, "event://FromProdutoViewModelToEncomendaViewModel"));
// Registers for incoming Notification messages EncomendaViewModel.
Messenger.Default.Register<NotificationMessage<Person>>(this, (message) =>
{ 
    // Checks the associated action.
    switch (message.Notification)
    {
        case "event://FromProdutoViewModelToEncomendaViewModel":
            // Gets the Person object
            var produto = message.Content as Produto;
            // Doing Stuff with the produto in EncomendaViewModel
            break;
        default:
            break;
    }
});

最后,我将发布Marco Minerva的博客文章,他完美地解释了它是如何工作的。

解决方案 2

另一种解决方案是将ProdutoViewModel和EncomendaViewModel合并到一个ViewModel中。此视图模型将包含绑定在每个透视上的这两个列表。