【问题标题】:XAML GridViewColumn DisplayMemberBinding does not seem to workXAML GridViewColumn DisplayMemberBinding 似乎不起作用
【发布时间】:2018-09-22 19:08:32
【问题描述】:

我正在尝试创建一个带有数据绑定的两列 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 目前看起来像这样:

【问题讨论】:

    标签: c# wpf xaml listview gridview


    【解决方案1】:

    我发现了我的错误:

    在我的窗口顶部,我正在导入另一个 XAML 文件,其中包含该窗口中其他控件的样式信息(以及列表视图)。删除文件时,Gridview 绑定按预期工作。所以我自己的风格会覆盖行为。 我现在将为所有样式分配键,这样它们就不会被自动使用。

    【讨论】:

      【解决方案2】:

      您似乎忘记设置数据上下文了。视图控件不知道在哪里查找绑定数据。

      将数据上下文设置为包含 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;
      

      我希望这会有所帮助。

      【讨论】:

      • 感谢您的回答,但这不是问题所在。上下文设置正确。 Listview 呈现正确的行数。但列不显示属性的内容,而只显示类的名称
      • 列标题显示类名还是每个单元格显示类名?
      • 每一行。似乎根本没有创建单元格。
      • 我仍然认为这是您的数据上下文的问题,请在您分配数据上下文的代码中添加一个 sn-p。
      • 查看添加的图像。列表视图的数据上下文很好。如果我将 ToString 方法添加到我的模型中,它将用于填充行。所以它必须处理DisplayMemberBinding。我错过了一些东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 2016-02-01
      • 2020-09-23
      • 2010-12-05
      • 2011-06-14
      • 2015-01-10
      • 2016-02-24
      相关资源
      最近更新 更多