在桌面版 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>
谢谢
解决方案 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中。此视图模型将包含绑定在每个透视上的这两个列表。