为什么我在这个例子中看不到细节。我无法改变dataclass,master类和detail类的结构。所以我必须用正确的绑定来解决这个问题。
public class ViewModel
{
public dataclass data { get; set; }
public ViewModel()
{
data = new dataclass();
master a_master = new master();
a_master.mastername = "hello";
detail a_detail = new detail();
a_detail.detailname = "goodbye";
data.details.Add(a_detail);
data.Add(a_master);
}
}
public class dataclass : ObservableCollection<master>
{
public ObservableCollection<detail> details { get; set; }
public dataclass()
{
details = new ObservableCollection<detail>();
}
}
public class master
{
public string mastername { get; set; }
}
public class detail
{
public string detailname { get; set; }
}
在我的XAML中,我这样绑定:
<Window x:Class="md.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:md.viewmodels"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<vm:ViewModel/>
</Window.DataContext>
<StackPanel Orientation="Vertical" >
<ListView ItemsSource="{Binding Path=data}">
<ListView.View>
<GridView>
<GridViewColumn Header="master" DisplayMemberBinding="{Binding mastername}"/>
</GridView>
</ListView.View>
</ListView>
<ListView ItemsSource="{Binding Path=data/details}">
<ListView.View>
<GridView>
<GridViewColumn Header="detail" DisplayMemberBinding="{Binding detailname}"/>
</GridView>
</ListView.View>
</ListView>
</StackPanel>
</Window>
答案 0 :(得分:5)
尝试
<ItemsSource="{Binding Path=data.details}">
而不是
<ItemsSource="{Binding Path=data/details}">
我认为你试图实现的是一种主/细节场景,它绑定到How to: Use the Master-Detail Pattern with Hierarchical Data中描述的分层数据。实际上,只要你有ObservableCollection<details>
作为派生自ObservableCollection<master>
的类的属性,这就不是分层的,因此绑定表达式中的/
将不起作用。有关/
的详细信息,请参阅PropertyPath XAML Syntax,源遍历(绑定到集合的层次结构)部分。
在C#中,capitalization也有广泛接受的约定,说你应该在公共类型中使用Pascal大小写,例如类和属性。