gpt4 book ai didi

wpf - 绑定(bind)到 ItemsControl 中的 CurrentItem

转载 作者:行者123 更新时间:2023-12-04 14:45:03 24 4
gpt4 key购买 nike

下面的 XAML 基本上是试图列出 Button s(从当前 Name 中的 Views 集合中的对象的 DataContext 属性呈现。

当我点击一个按钮时,CurrentItem CollectionViewSource 的属性(property)应该改变和相关的View应该显示在内容演示器中。

好的。如果我点击 ListBox在下面的 XAML 中,它完全按照需要工作。

但是,如果我单击 UniformGrid 中的按钮(由项目控制创建)CurrentItem属性未更新。

我如何获得 CurrentItemItemsControl 中选择项目时更新?

谢谢

<UserControl x:Class="Pos.Features.Reservation.ReservationView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:product="clr-namespace:Pos.Features.ProductBrowser"
xmlns:activity="clr-namespace:Pos.Features.ActivityBrowser"
xmlns:addbysku="clr-namespace:Pos.Features.AddBySku"
xmlns:client="clr-namespace:Pos.Features.ClientBrowser"
xmlns:notes="clr-namespace:Pos.Features.Notes"
xmlns:controls="clr-namespace:Pos.Views"
xmlns:res="clr-namespace:Pos.Core;assembly=Pos.Core"
Height="300" Width="300">
<UserControl.Resources>
<DataTemplate DataType="{x:Type product:ProductBrowserViewModel}">
<product:ProductBrowserView/>
</DataTemplate>
<DataTemplate DataType="{x:Type activity:ActivityBrowserViewModel}">
<activity:ActivityBrowserView/>
</DataTemplate>

<CollectionViewSource x:Name="x" x:Key="ViewsCollection" Source="{Binding Views}" />
</UserControl.Resources>

<StackPanel>
<ListBox Name="ListBoxMenu" Grid.Column="0" Margin="5" ItemsSource="{Binding Source={StaticResource ViewsCollection}}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" Padding="10"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ContentControl Grid.Column="1" Content="{Binding ElementName=ListBoxMenu, Path=SelectedItem}"/>
<ItemsControl Grid.Column="2" Name="ViewList" ItemsSource="{Binding Source={StaticResource ViewsCollection}}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button>
<TextBlock Text="{Binding Path=Name}" Name="txtButtonLabel" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Black"/>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1" Columns="{Binding Views.Count}"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<ContentControl Grid.Column="3" Content="{Binding Source={StaticResource ViewsCollection}, Path=CurrentItem}"/>
<Button Grid.Column="4" Click="Button_Click">dsadsd</Button>
</StackPanel>
</UserControl>

最佳答案

你的按钮什么都不做。通常,您的 ViewModel 会有一个名为 Select(或类似的东西)的 ICommand,Button 将被绑定(bind)到
Command="{Binding Select, ElementName="root"}"
并且您将实例传递给您想要选择的 ICommand
CommandParameter="{Binding}"
它看起来像这样(c#/XAML 类似于伪代码):

public class MyModel { public string Name {get;set;} }

public class MyViewModel
{
public ObservableCollection<MyModel> Models {get;set;}
public ICommand Select {get;set;}
/* configure Models and Select etc */
}

<UserControl DataContext="{StaticResource MyViewModelInstance}" x:Name="root">
<ItemsControl ItemsSource="{Binding Models}">
<ItemsControl.ItemTemplate>
<ItemsPanelTemplate>
<Button Text="{Binding Name}"
Command="{Binding Select, ElementName="root"}"
CommandParameter="{Binding}"/>
</ItemsPanelTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</UserControl>

项目控制 绑定(bind)到 型号 , 所以每个 我的型号 型号 得到一个按钮。按钮文本绑定(bind)到属性名称。按钮命令绑定(bind)到 选择 ViewModel 中的属性。当按钮被按下时,它调用 ICommand,发送 的实例我的型号 按钮绑定(bind)的。

请注意,在 UserControl 中使用 ViewModels是 代码气味 . UserControl s 应该像所有其他控件一样出现在用户面前——它们应该具有绑定(bind)到用户 ViewModel 而不是您的 ViewModel 的可绑定(bind)公共(public)属性。然后绑定(bind)到 UserControl 中的这些属性的值。 .对于此示例,您将在 UserControl 上定义 ItemsSource 属性。 ,以及 ItemsControl将绑定(bind)到此属性而不是直接绑定(bind)到 ViewModel。

关于wpf - 绑定(bind)到 ItemsControl 中的 CurrentItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1939907/

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