Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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
C# UserControl和嵌套DataGrid上的依赖项属性_C#_Wpf_Datagrid_User Controls - Fatal编程技术网

C# UserControl和嵌套DataGrid上的依赖项属性

C# UserControl和嵌套DataGrid上的依赖项属性,c#,wpf,datagrid,user-controls,C#,Wpf,Datagrid,User Controls,我有这样一个用户控件: DataContext为null,我将ListView ItemsSource设置为IEnumerable of Persons public class Persons { public int ID { get; set; } public string Name { get; set; } public string Address { get; set; } public List<Persons> Contacts

我有这样一个用户控件:

DataContext为null,我将ListView ItemsSource设置为IEnumerable of Persons

public class Persons
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public List<Persons> Contacts { get; set; }
}
System.Windows.Data错误:4:找不到与绑定的源 参考“相对资源查找器”, AncestorType='System.Windows.Controls.UserControl', AncestorLevel='1'。BindingExpression:Path=ShowAddress;DataItem=null; 目标元素是“DataGridTextColumn”(HashCode=55248170);目标 属性为“可见性”(类型为“可见性”)

也许可以使用资源usercontrol来完成,但是datagrid对usercontrol中定义的资源没有作用域


注意:BoolToVisible是一个转换器,用于将“真”转换为“可见”,将“假”转换为“折叠”

相对资源扩展不适用于DataGridTextColumn(或任何其他DataGridColumn),因为此列不是逻辑树的一部分。您可以执行一些变通操作,例如:

<UserControl x:Class="Test31990722.Contacts"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Test31990722"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300"
             Name="uc">

    <UserControl.Resources>
        <local:BoolToVisible x:Key="BoolToVisible" />
    </UserControl.Resources>
    <ListView Name="lv">
        <ListView.ItemTemplate>
            <DataTemplate>
                <DataGrid ItemsSource="{Binding Contacts}" AutoGenerateColumns="False"
                          Tag="{Binding ShowAddress, ElementName=uc,Converter={StaticResource BoolToVisible}}">
                    <DataGrid.Resources>
                        <TextBlock x:Key="FileNameColHeader" Text="Address" Tag="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}, Path=Tag}"/>
                    </DataGrid.Resources>
                    <DataGrid.Columns>
                        <DataGridTextColumn Binding="{Binding Name}"/>
                        <DataGridTextColumn Binding="{Binding Address}" Header="{StaticResource FileNameColHeader}"
                                            Visibility="{Binding Tag,  Source={StaticResource FileNameColHeader}}"/>
                    </DataGrid.Columns>
                </DataGrid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</UserControl>


希望有帮助

如果存在,请分享您的ShowAddress声明和DataContext设置。我编辑这个问题。这是什么?listviewDataTemplate中列出的每个人的“联系人”绑定没有ItemSource或ItemsSource属性。也许,ItemsSource与ListView相关?
public class Persons
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public List<Persons> Contacts { get; set; }
}
{Binding Path=ShowAddress, Converter={StaticResource BoolToVisible}, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}
<UserControl x:Class="Test31990722.Contacts"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Test31990722"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300"
             Name="uc">

    <UserControl.Resources>
        <local:BoolToVisible x:Key="BoolToVisible" />
    </UserControl.Resources>
    <ListView Name="lv">
        <ListView.ItemTemplate>
            <DataTemplate>
                <DataGrid ItemsSource="{Binding Contacts}" AutoGenerateColumns="False"
                          Tag="{Binding ShowAddress, ElementName=uc,Converter={StaticResource BoolToVisible}}">
                    <DataGrid.Resources>
                        <TextBlock x:Key="FileNameColHeader" Text="Address" Tag="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}, Path=Tag}"/>
                    </DataGrid.Resources>
                    <DataGrid.Columns>
                        <DataGridTextColumn Binding="{Binding Name}"/>
                        <DataGridTextColumn Binding="{Binding Address}" Header="{StaticResource FileNameColHeader}"
                                            Visibility="{Binding Tag,  Source={StaticResource FileNameColHeader}}"/>
                    </DataGrid.Columns>
                </DataGrid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</UserControl>