我有主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();
}
}
答案 0 :(得分:0)
如果我正确理解了您的问题,则会有一个Session
列表,其中每个列表都包含Exercise
列表。这些中的每一个都可以被视为视图模型。
您的主视图模型有一个SelectedSession
来指示选择了哪个Session
。您只需在Session
内执行相同的操作(不是示例中的主视图模型)。将SelectedExercise
添加到Session
,并将内部SelectedItem
的{{1}}绑定到其中。
然后,您可以使用ListBox
从主视图模型访问内部选定的Exercise
。
答案 1 :(得分:0)
在这里,我找到了如何通过DataContext绑定直接绑定它的解决方案:
SelectedItem="{Binding DataContext.SelectedExercise, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}"
但是在这种情况下,应该以这种方式绑定到View Model:
<Grid.DataContext>
<Binding Source="{StaticResource Locator}" Mode="OneWay" Path="TrainingSessionMain"/>
</Grid.DataContext>
参与的Thx。