绑定到数据上下文父级的属性 - WPF

7

我有一个数据表格:

 <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更好的示例 - Blachshma
我编辑了这个问题,如果非常必要的话,l是一个字符串,并且正在使用Notify工作。 - Hodaya Shalom
2个回答

17

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

另外我不会处理名称大小写。WPF 对大小写很敏感。避免使用一个字母的名称。


这似乎不能工作,因为DataGridColumn不是可视树的一部分。所以无法进行查找。无法找到引用“RelativeSource FindAncestor,AncestorType ='System.Windows.Window'”的绑定源。这在列中的VisibilityProperty上。通过x:Reference,此问题似乎已得到解答https://dev59.com/zGEh5IYBdhLWcg3wvVl4 - user99999991

1
绑定路径也是区分大小写的。您的数据上下文中没有属性 lName

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接