我正在尝试创建一个具有数据绑定的两列ListView。 XAML看起来像这样:
<ListView x:Name="BookingVariantsListView" ItemsSource="{Binding BookingVariants}" SelectionChanged="BookingVariantsListView_SelectionChanged" DockPanel.Dock="Top" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Top">
<ListView.View>
<GridView AllowsColumnReorder="False">
<GridView.Columns>
<GridViewColumn Header="{x:Static loc:Settings.VariantTitle}" DisplayMemberBinding="{Binding Title}" Width="320" />
<GridViewColumn Header="{x:Static loc:Settings.VariantLink}" DisplayMemberBinding="{Binding BookingVariantURL}" Width="315" />
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
和这样的模型:
public class BookingVariant
{
[JsonProperty("title")]
public string Title { get; set; }
[JsonProperty("booking_variant_url")]
public string BookingVariantURL { get; set; }
}
它保存在一个列表中:
public ObservableCollection<BookingVariant> BookingVariants { get; private set; }
现在,列表绑定似乎可以正常工作,因为它可以填充正确的行数。但是列未填充。而是每行仅显示一次类的名称。这些列看起来完全被忽略。
有人知道吗? 谢谢!
编辑:
答案 0 :(得分:0)
似乎您忘记了设置数据上下文。视图控件不知道在哪里查找绑定数据。
将数据上下文设置为包含ObservableCollection的对象。
包含类的源
public class MyData
{
// I dont know your class structure so I added all data in the constructor
public MyData()
{
BookingVariants = new ObservableCollection<BookingVariant>();
this.BookingVariants.Add(new BookingVariant()
{ Title = "Title", BookingVariantURL = "myURL" });
this.BookingVariants.Add(new BookingVariant()
{ Title = "Title2", BookingVariantURL = "myURL2" });
this.BookingVariants.Add(new BookingVariant()
{ Title = "Title3", BookingVariantURL = "myURL3" });
}
public ObservableCollection<BookingVariant> BookingVariants
{
get;
private set;
}
}
在调用类中,您可以这样定义数据上下文:
MyData dataObject = new MyData();
BookingVariantsListView.DataContext = dataObject;
我希望这会有所帮助。
答案 1 :(得分:0)
我发现了我的错误:
在窗口的顶部,我正在导入另一个XAML文件,其中包含该窗口中其他控件的样式信息(以及列表视图)。删除文件时,Gridview绑定将按预期工作。因此,我自己的样式会取代行为。 现在,我将为所有样式分配键,以免它们被自动使用。