Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在DataGrid WPF XAML中的数据之间导航_Wpf_Xaml_Wpfdatagrid - Fatal编程技术网

在DataGrid WPF XAML中的数据之间导航

在DataGrid WPF XAML中的数据之间导航,wpf,xaml,wpfdatagrid,Wpf,Xaml,Wpfdatagrid,我有一些复选框,表示用户可以访问的程序中的模块 您可以从DataGrid中看到,第四列中的模块是从“DataContext.ModuleCollection”创建的,其中DataGrid的行是从UserCollection创建的。我希望用户ID是每个复选框的内容。这将设置为复选框样式,我在底部尝试了这种样式,但没有取得多大成功 我的问题是,复选框位于模块级别(数据中),我需要找到一种方法返回到用户级别以获取用户ID 用户ID是行数据集的一部分,例如用户记录 问题是如何获得以下样式的用户ID 下

我有一些复选框,表示用户可以访问的程序中的模块

您可以从DataGrid中看到,第四列中的模块是从“DataContext.ModuleCollection”创建的,其中DataGrid的行是从UserCollection创建的。我希望用户ID是每个复选框的内容。这将设置为复选框样式,我在底部尝试了这种样式,但没有取得多大成功

我的问题是,复选框位于模块级别(数据中),我需要找到一种方法返回到用户级别以获取用户ID

用户ID是行数据集的一部分,例如用户记录

问题是如何获得以下样式的用户ID

下面是我的数据网格:

<DataGrid  ItemsSource="{Binding UserCollection}" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}"/>
        <DataGridTextColumn Header="Job Title" Binding="{Binding Path=Job_Title}"/>
        <DataGridTextColumn Header="Company" Binding="{Binding Path=Company}"/>
        <DataGridTemplateColumn CanUserReorder="True">
            <DataGridTemplateColumn.Header>
                <ItemsControl ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.ModuleCollection}" >
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal" Background="Transparent" CanVerticallyScroll="False" CanHorizontallyScroll="False"></StackPanel>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Style="{StaticResource ListViewItemRotatedText}" Text="{Binding ModuleName}" >
                            </TextBlock>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </DataGridTemplateColumn.Header>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ItemsControl ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.ModuleCollection}" >
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <StackPanel Orientation="Horizontal" Background="Transparent" CanVerticallyScroll="False" CanHorizontallyScroll="False"></StackPanel>
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <CheckBox Style="{StaticResource ListViewItemCheckbox}" />
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

以下是我的支票样式:

<Style x:Key="ListViewItemCheckbox" TargetType="CheckBox">
        <Setter Property="Content" Value="{Binding Path=User_ID, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}"/>
</Style>

您当前的
绑定路径将无法工作,因为您试图从
DataGridRow
访问
用户ID
属性,当然,该属性没有一个。。。您在Visual Studio中的输出窗口中应该有错误。。。密切关注这些错误,因为它们将帮助您解决问题

那么您可以使用什么
绑定路径
?好吧,你是对的,因为我们必须使用
相对资源绑定
。。。请尝试以下方法:

<Style x:Key="ListViewItemCheckbox" TargetType="CheckBox">
    <Setter Property="Content" Value="{Binding Path=DataContext.User_ID, 
        RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" />
</Style>

我希望用户ID是每个复选框的内容。您想在该行的所有五个
复选框中显示每行相同的
User\u ID
值吗?是的,这可能看起来很奇怪,但我只想知道如何从中获取引用。我最终会将这个问题发送到与复选框相同级别的转换器。这是我第四次重新措辞这个问题,因此我非常感谢您在这方面的帮助!我知道。。。很难理解。。。现在回答。让我看看你要去哪里,但是它在输出窗口中返回了以下内容:System.Windows.Data警告:40:BindingExpression路径错误:“在“对象”“模块”(HashCode=62906887)上找不到User_ID”属性。BindingExpression:Path=User\u ID;DataItem='Module'(HashCode=62906887);目标元素为“复选框”(名称=“”);目标属性为“NoTarget”(类型为“Object”)“System.InvalidCastException”类型的第一次意外异常发生在UserManagement中。dllI明白您的意思,为每个用户创建一个模块集合吗?尽管如此,必须有一种方法(如果不是这样的话)才能从复选框中找到用户ID。Nevermind刚刚找到它,将x:Type DataGrid替换为DataGridRow,它已经完成了。感谢您的耐心,我将把您关于数据模型的建议付诸行动,并回答更多相关问题。如果我想从同一个位置绑定到用户对象,而不是它的某个属性,你会怎么做?
<Style x:Key="ListViewItemCheckbox" TargetType="CheckBox">
    <Setter Property="Content" Value="{Binding Path=DataContext, 
        RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" />
</Style>