[英]WPF: bind SelectedItem of nested ListBox to property C#
我有主DataTemplate ListBox,它具有SelectedItem = SelectedSession,还有一个嵌套的ListBox,它具有SelectedItem = AssignedExercises,如果我将该属性绑定到两个选定项,则无法获得嵌套的ListBoxe的项AssignedExercises。
您是否知道如何到达嵌套的ListBoxes SelectedItem(AssignedExercises)并将其绑定到属性?
XAML代码:
<ListBox Grid.Row="1" ItemsSource="{Binding SessionList}" SelectedItem="{Binding SelectedSession}" Margin="0,0,0,20">
<ListBox.ItemTemplate>
<DataTemplate>
<Border CornerRadius="2" BorderBrush="Black" BorderThickness="2" Width="1000" Height="200" Margin="1">
<Grid>
<Label Content="List of exercises" RenderTransformOrigin="0.5,0.5" Height="30" VerticalAlignment="Top" FontWeight="Bold"></Label>
<ListBox Height="150" Width="325" ItemsSource="{Binding AssignedExercises}" SelectedItem="{Binding AssignedExercises}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border Height="50" Width="300" BorderBrush="LightGray" BorderThickness="2" CornerRadius="2" Margin="0,1,0,1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Margin="5,0,5,0" VerticalAlignment="Center" HorizontalAlignment="Center" Orientation="Horizontal">
<Label Content="{Binding Name}" FontSize="14" FontWeight="Bold"/>
</StackPanel>
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
属性:
private TrainingSessionVM selectedSession;
private ExerciseVM selectedExercise;
public TrainingSessionVM SelectedSession
{
get { return selectedSession; }
set
{
selectedSession = value;
RaisePropertyChanged();
}
}
public ExerciseVM SelectedExercise
{
get { return selectedExercise; }
set
{
selectedExercise = value;
RaisePropertyChanged();
}
}
如果我正确理解了您的问题,那么您将拥有一个Session
列表,每个Session
都包含一个Exercise
列表。 这些中的每一个都可以视为视图模型。
您的主视图模型具有SelectedSession
来指示SelectedSession
了哪个Session
。 您只需要在Session
执行相同的操作(而不是示例中的主viewmodel)。 将一个SelectedExercise
添加到Session
,并将内部ListBox
SelectedItem
绑定到它。
然后,您可以使用SelectedSession.SelectedExercise
从主视图模型访问内部选定的Exercise
。
在这里,我找到了如何通过DataContext绑定直接将其绑定的解决方案:
SelectedItem="{Binding DataContext.SelectedExercise, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}"
但是在这种情况下,应通过以下方式绑定到视图模型:
<Grid.DataContext>
<Binding Source="{StaticResource Locator}" Mode="OneWay" Path="TrainingSessionMain"/>
</Grid.DataContext>
参与的谢意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.