Silverlight绑定到父DataTemplate

时间:2013-09-16 10:49:25

标签: c# silverlight xaml data-binding binding

我有用户数组和角色数组。 我为每个用户呈现角色列表。 我想将复选框绑定到某个用户属性。

这是我的代码(第38行): https://gist.github.com/sadgb/30e2b75f2fff159bc26e#file-gistfile1-xml-L38

为什么这一行:

{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Grid}, Path=DataContext}

...绑定到Role类,而不是绑定到User类?

绑定应该在第21行找到网格,其中DataContext的类型为User不是吗?

2 个答案:

答案 0 :(得分:2)

还有另一种方式: - 1.给你的网格命名。 2.然后像这样绑定:

DataContext="{Binding ElementName=Gridname,Path=DataContext}"

以下是您编辑的代码:

<DataTemplate DataType="usersService:User">
    <Grid Name="TheGrid">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0" Text="{Binding UserId}"/>
        <telerik:RadListBox Grid.Row="1"
    ItemsSource= "{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=users:UsersPage}, Path=RolesViewModel.Roles}" IsTextSearchEnabled="false">
            <telerik:RadListBox.ItemTemplate>
                <DataTemplate DataType="accessControlSubsystem:Role">
                    <StackPanel>
                        <CheckBox
                            IsChecked="{Binding ElementName=TheGrid,Path=DataContext , Converter={StaticResource CheckBoxToSelectedArrayConverter}, Mode=TwoWay}" Content="{Binding RoleName}" Tag="{Binding RoleId}" />
                    </StackPanel>
                </DataTemplate>
            </telerik:RadListBox.ItemTemplate>
        </telerik:RadListBox>
    </Grid>
</DataTemplate>

我想这可以解决你的问题或至少给你一个良好的开端。

我在代码中注意到的另一件事是你没有在相对绑定中指定属性名称:

IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Grid}, Path=DataContext.PopertyName, Converter={StaticResource CheckBoxToSelectedArrayConverter}, Mode=TwoWay}"  Content="{Binding RoleName}" Tag="{Binding RoleId}" 

答案 1 :(得分:0)

您可以使用“ancestorLevel”

向上移动一级

{Binding RelativeSource = {RelativeSource Mode = FindAncestor,AncestorType = Grid},AncestorLevel = 1,Path = DataContext}

奥利弗