XAML GridViewColumn DisplayMemberBinding似乎不起作用

时间:2018-09-22 19:08:33

标签: c# wpf xaml listview gridview

我正在尝试创建一个具有数据绑定的两列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; }

现在,列表绑定似乎可以正常工作,因为它可以填充正确的行数。但是列未填充。而是每行仅显示一次类的名称。这些列看起来完全被忽略。

有人知道吗? 谢谢!

编辑:

Listview当前看起来像这样: current faulty listview rows

2 个答案:

答案 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绑定将按预期工作。因此,我自己的样式会取代行为。 现在,我将为所有样式分配键,以免它们被自动使用。