我正在使用 PRISM 开发 wpf 应用程序。这是我的第一个 WPF 应用程序,我发现自己处于无法前进的境地。
我的场景是这样的,我有一个与 ListBox 绑定的组列表,您可以将其称为父 ListBox,每个组对象都有一个与之关联的用户列表,并且我将该列表与嵌套在其中的另一个 ListBox 绑定父列表框。如您在此处看到的,两种绑定都工作正常:
我面临两个问题。
1.我可以分别选择组和单个用户,但它们不同步,这意味着如果我选择一个用户,那么包含该用户的组不会被选中。我试过 IsSynchronizedWithCurrentItem="True" 但这似乎不起作用。
如果有人能指出正确的方向如何实现这一点,或者除了在 ListBox 中使用 ListBox 之外还有其他方法,我将不胜感激。
2.我有一个与父 ListBox 关联的上下文菜单,并且我能够成功地将命令与菜单绑定,但是我在将命令与嵌套的 ListBox 上下文菜单绑定时遇到了麻烦,这是我的代码
<ListBox x:Name="lstOfGroups"
ItemsSource="{Binding CurrentContest.Groups}"
SelectedItem="{Binding SelectedGroup}"
ItemTemplate="{StaticResource GroupTemplate}"
Style="{StaticResource ListBoxStyle1}"
ItemContainerStyle="{StaticResource ListBoxItemStyle1}"
Background="Transparent" SelectionMode="Single"
IsSynchronizedWithCurrentItem="True"
Height="400">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" Margin="5" Width="1200"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Add Contestant" Command="{Binding AddGroupCommand}"/>
<MenuItem Header="Edit Contestant" Command="{Binding EditGroupCommand}"/>
<MenuItem Header="Delete Contestant" Command="{Binding DeleteGroupCommand}"/>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
<DataTemplate x:Key="GroupTemplate" >
<Border x:Name="spPubItemBorder" Margin="3" BorderBrush="Black" BorderThickness="1" CornerRadius="10" Background="Honeydew">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<TextBlock Name="tbGroupName" Grid.Column="0" Style="{StaticResource ItemTextBox}">
<TextBlock.Text>
<MultiBinding StringFormat="{}Group Name: {0}">
<Binding Path="Name" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock Name="tbGroupAmount" Grid.Column="1" Style="{StaticResource ItemTextBox}">
<TextBlock.Text>
<MultiBinding StringFormat="{}Group Amount: {0}">
<Binding Path="Amount" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
<!--<ItemsControl ItemsSource="{Binding ContestantList}"
AlternationCount="2" ItemTemplate="{StaticResource ContestantTemplate}">
</ItemsControl>-->
<ListBox x:Name="lstOfContestant" Grid.Row="1"
ItemsSource="{Binding ContestantList}"
SelectedItem="{Binding SelectedContestant, ElementName=lstOfGroups}"
ItemTemplate="{StaticResource ContestantTemplate}"
Style="{StaticResource ListBoxStyleForContestant}"
ItemContainerStyle="{StaticResource ListBoxItemStyleForContestant}"
Background="Transparent" SelectionMode="Single"
Height="Auto">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" Margin="5" Width="375"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Add Contestant" Command="{Binding Path=DataContext.AddContestantCommand,ElementName=contestantManager}"/>
<MenuItem Header="Edit Contestant" Command="{Binding Path=DataContext.EditContestantCommand,ElementName=contestantManager}"/>
<MenuItem Header="Delete Contestant" Command="{Binding Path=DataContext.DeleteContestantCommand,ElementName=contestantManager}"/>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
</Grid>
</Border>
</DataTemplate>
我想知道是否有人也可以在这里为我指明正确的方向。
提前致谢。