Data binding WPF:在UserControl中数据绑定ListView不显示任何项

Data binding WPF:在UserControl中数据绑定ListView不显示任何项,data-binding,.net-3.5,binding,Data Binding,.net 3.5,Binding,我很确定这是一个UserControl DataContext问题,但我没有看到它: 这是我的XAML: <UserControl x:Class="WFT.Controls.DetailsBox" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:wft="clr

我很确定这是一个UserControl DataContext问题,但我没有看到它:

这是我的XAML:

<UserControl x:Class="WFT.Controls.DetailsBox"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:wft="clr-namespace:WFT.Controls" >

    <wft:CaptionedBox Caption="Details" Margin="1" >
        <ListView ItemsSource="{Binding Map}">
            <ListView.View>
                <GridView>
                    <GridViewColumn DisplayMemberBinding="{Binding Key}"  />
                    <GridViewColumn DisplayMemberBinding="{Binding Value}" />
                </GridView>
            </ListView.View>
        </ListView>
    </wft:CaptionedBox>
</UserControl>

这就是背后的代码:

public partial class DetailsBox : UserControl
{
    ObservableCollection<KeyValuePair<string, string>> m_Map =
        new ObservableCollection<KeyValuePair<string, string>>( );

    public ObservableCollection<KeyValuePair<string, string>> Map
    { get { return m_Map; } }

    public DetailsBox( )
    {
        InitializeComponent( );
        DataContext = this;
    }

    public void Initialize( List<string> map )
    {
        IEnumerable<int> range = Enumerable.Range( 0, map.Count );

        m_Map = new ObservableCollection<KeyValuePair<string, string>>(
            range.Where( r => 0 == r % 2 && map[ r + 1 ].Trim( ) != "N/A" )
            .Select( r => new KeyValuePair<string, string>( map[ r ], map[ r + 1 ] ) ).ToList( ) );

    }
}
public部分类详细信息box:UserControl
{
可观测采集m_图=
新的可观察集合();
公共可观测收集图
{get{返回m_映射;}}
公共详细信息框()
{
初始化组件();
DataContext=this;
}
公共无效初始化(列表映射)
{
IEnumerable range=Enumerable.range(0,map.Count);
m_Map=新的可观测集合(
范围。其中(r=>0==r%2&&map[r+1]。修剪()!=“不适用”)
.Select(r=>newkeyvaluepair(map[r],map[r+1])).ToList();
}
}
在运行时,Map有八个项目,但ListView中没有显示任何内容。在一个独立的测试应用程序中,它使用
DataContext=“{Binding RelativeSource={RelativeSource Self}}”
,但作为一个用户控件,这不起作用。正如您在上面看到的,我甚至尝试在构造函数中设置
DataContext=this


谢谢

我从来没有弄明白如何在XAML中设置DataContext,但我通过执行以下操作完成了工作:

在XAML中,我向listview添加了
x:Name=“listview”

然后,在代码隐藏中,我将属性Map转换为dependencProperty

public ObservableCollection<KeyValuePair<string, string>> Map
{
    get { return (ObservableCollection<KeyValuePair<string, string>>)GetValue( MapProperty ); }
    set { SetValue( MapProperty, value ); }
} 

public static DependencyProperty MapProperty = DependencyProperty.Register( "Map",
     typeof( ObservableCollection<KeyValuePair<string, string>> ), 
     typeof( DetailsBox ),
     new PropertyMetadata( new ObservableCollection<KeyValuePair<string, string>>( ) ) );
公共可见采集图
{
get{return(ObservableCollection)GetValue(MapProperty);}
set{SetValue(MapProperty,value);}
} 
公共静态DependencyProperty映射属性=DependencyProperty.Register(“映射”,
类型(可观测采集),
类型(详细信息框),
新的PropertyMetadata(新的ObservableCollection());

删除
DataContext=this,并添加
listview.DataContext=Map在加载映射后初始化。

是否设置了ListView的DataContext?乍一看,一切都很好,但我看不出DataContext是如何设置的。我编辑了这个问题以显示DataContext。我从教程中复制了这个。。。有没有办法指定这是针对ListView本身的?事实上,它是在XAML头中定义的;我的xaml是一个用户控件;RelativeSource绑定在窗口中对我有效,但在UserControl中无效(原始问题已编辑)。我尝试过的某些东西立即关闭了VS2008!