【问题标题】:Binding to property of datacontext parent- WPF绑定到数据上下文父级 WPF 的属性
【发布时间】:2013-01-20 08:55:27
【问题描述】:

我有一个数据网格:

 <DataGrid x:Name="DG" ItemsSource="{Binding}" AutoGenerateColumns="False">
     <DataGrid.Columns>
          <DataGridTextColumn Header="?" Binding="{Binding l}">
          </DataGridTextColumn>
     </DataGrid.Columns>
  </DataGrid>

在DataGrid的DataContext中有X类的集合:

public ObservableCollection<xxx> col{ get; set; }// = DataContext of DG

    private string lName;

    public string LName
    {
        get { return lName; }
        set
        {
            lName= value;
            NotifyPropertyChanged("LName");
        }
    }

我希望 lName 成为 DataGrid 中特定列的标题

我试试这个方法:

 <DataGridTextColumn  Binding="{Binding l}">//l=prop of xxx class that contains the collection
                                <DataGridTextColumn.HeaderTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding DataContext.LName,
                       RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
                                    </DataTemplate>
                                </DataGridTextColumn.HeaderTemplate>
                            </DataGridTextColumn>

没用

如何做到这一点?

【问题讨论】:

  • 什么是l - 请发布一个更好的 ViewModel 示例
  • 我编辑了这个问题,如果有必要,那么 l 是一个字符串,也可以使用 Notify ...

标签: wpf binding datagrid


【解决方案1】:

试试{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.LName}

我也不会玩名字案例。 WPF 非常区分大小写。避免使用单一符号名称

【讨论】:

  • 这似乎不起作用,因为 DataGridColumn 不是可视树的一部分。所以它无法进行查找。无法通过引用“RelativeSource FindAncestor, AncestorType='System.Windows.Window”找到绑定源。这位于列中的 VisibilityProperty 上。这个问题似乎用 x 来回答:参考stackoverflow.com/questions/22073740/…
【解决方案2】:

绑定路径也区分大小写。您的 DC 中没有资产 lName

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 2011-03-11
    • 2016-03-15
    • 1970-01-01
    • 2015-06-11
    • 2013-02-02
    • 2014-07-30
    • 2010-12-14
    相关资源
    最近更新 更多