2017-01-31 11 views
1

У меня есть следующие datagrid:заголовка DataGrid WPF не обновляется

<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:

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)

Любые подсказки?

+0

Что такое локализация здесь в DataContext.Localization.Id? – Vijay

+0

@Vijay: экземпляр ClientListLocalization, содержащийся в модели представления, используемой как datacontext. ViewModel - это фактически ClientListViewModel –

ответ

2

Это решение фиксированная моя проблема: How to bind column header to property in ViewModel? (WPF MVVM)

Определения столбцов в DataGrid не наследуют DataContext, потому что они не являются частью визуального дерева, так что вы не можете связать непосредственно с ViewModel.