WPF数据网格标头未更新

时间:2017-01-31 08:56:48

标签: c# wpf datagrid

我有以下datagrid

    <DataGrid ItemsSource="{Binding Clients}" AutoGenerateColumns="False" x:Name="control" HeadersVisibility="Column">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Id}" Header="{Binding DataContext.Localization.Id, RelativeSource={RelativeSource AncestorType={x:Type Grid}}}" />
            <DataGridTextColumn Binding="{Binding Name}" Header="{Binding DataContext.Localization.Name, ElementName=control}" />
        </DataGrid.Columns>
    </DataGrid>

在我的ViewModel我有一个本地化对象,其中包含从resx加载的ui的所有字符串:

public class ClientListLocalization : LocalizationBase
{
    private string _id;
    private string _name;

    public string Id
    {
        get { return _id; }
        set { _id = value; RaisePropertyChanged(); }
    }

    public string Name
    {
        get { return _name; }
        set { _name = value; RaisePropertyChanged(); }
    }

    internal override void Localize()
    {
        Id = Resources.clientview_id;
        Name = Resources.clientview_name;
    }
}

我的视图模型(简化)

public class ClientListViewModel
{
    public new ClientListLocalization Localization { get; set; }
}

但是在我的应用程序中,标题不会更新,第一种方式(使用RelativeSource)或第二种方式(使用ElementName

任何线索?

1 个答案:

答案 0 :(得分:2)

此解决方案解决了我的问题:How to bind column header to property in ViewModel? (WPF MVVM)

DataGrid的列定义不会继承DataContext,因为它们不是可视树的一部分,因此您无法直接绑定到ViewModel