繁体   English   中英

WPF:将嵌套列表框的SelectedItem绑定到属性C#

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM