0
我敢肯定這是一個用戶控件的DataContext問題,但我只是沒有看到它:WPF:在用戶控件綁定一個ListView顯示沒有任何項目
這是我的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());
}
}
在運行時,地圖有八個項目,但沒有顯示在ListView。在獨立測試應用程序中,它可以與DataContext="{Binding RelativeSource={RelativeSource Self}}"
一起使用,但是作爲UserControl,這不起作用。正如你上面看到的,我甚至還試圖在構造函數中設置DataContext = this
。
謝謝!
是ListView集的DataContext?乍一看,一切看起來不錯,但我看不到DataContext是如何設置的。 – 2011-04-20 14:47:58
我編輯了問題以顯示DataContext。我從教程中複製這個...有沒有一種方法來指定這是爲ListView本身?實際上,它是在XAML標題中定義的。 – 2011-04-20 14:53:53
我很確定問題出在DataContext中;我的xaml是一個UserControl; RelativeSource綁定在我的窗口中工作,但不在UserControl中(編輯原始問題)。我試過的某些東西已經立即關閉VS2008! – 2011-04-21 18:07:50