我有以下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
)
任何线索?
答案 0 :(得分:2)
此解决方案解决了我的问题:How to bind column header to property in ViewModel? (WPF MVVM)
DataGrid
的列定义不会继承DataContext
,因为它们不是可视树的一部分,因此您无法直接绑定到ViewModel
。