2013-10-17 6 views
3

현재 사용자가 선택한 언어를 기반으로 런타임에 인터페이스 텍스트를 바꿀 수있는 다국어 앱을 개발 중입니다. ResourceDictionary에 정의 된 DynamicResources를 사용하고 언어가 변경 될 때 사전 파일을 교체합니다. 이 기능은 DataGrid의 열 머리글 속성을 제외한 모든 항목에 유용합니다. DataGrid 열은 Visual Tree의 일부가 아니며 과거에 내 VM의 속성에 바인딩하기 위해 프록시를 사용했지만,이 경우에는 VM에 바인딩되지 않습니다. ResourceDictionary를 바꿀 때 어떻게 열 머리글을 업데이트 할 수 있습니까?DataGrid - 런타임시 열 머리글 변경

사전을 교체하는 방법은 다음과 같습니다. 이것은 Application.xaml.vb에 있으며 MySettings.Default에 저장된 문자열을 전달하는 응용 프로그램 시작시 호출됩니다. 또한 ComboBoxSelectedIndex에 바인딩 된 VM의 속성에서 메신저를 사용하여 호출됩니다.

Private Sub SetLanguage(ByVal language As String) 
    Dim dic As ResourceDictionary = Nothing 
    Dim langFile As String = Environment.CurrentDirectory & "\Languages\" & language & ".xaml" 
    If File.Exists(langFile) Then 
     Using fs As FileStream = New FileStream(langFile, FileMode.Open) 
      dic = CType(XamlReader.Load(fs), ResourceDictionary) 
      If LanguageCount > 0 Then 
        Resources.MergedDictionaries.RemoveAt(Resources.MergedDictionaries.Count - 1) 
      End If 
      Resources.MergedDictionaries.Add(dic) 
     End Using 
    End If 
    LanguageCount += 1 
End Sub 

관련 데이터 그리드 XAML

<DataGridTextColumn Header="{DynamicResource G_Spec}" ... /> 

ResourceDictionary의 항목

<system:String x:Key="G_Spec">Spec:</system:String> 
+0

리소스 사전을 "교환하는 방법"코드를 보여줍니다. –

답변

4

이 기본적으로 당신은 열에 대한 HeaderTemplate을 사용할 수 있습니다, 매우 간단한 예입니다 :

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.HeaderTemplate> 
     <DataTemplate> 
      <TextBlock Text="{DynamicResource MyColumnHeaderText}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.HeaderTemplate> 
</DataGridTemplateColumn> 
+0

그게 그만큼 쉽지, 고마워! – user1017477

+0

나는 같은 문제가 있었다. 이 기능이 작동하고 이 아닌 이유는 무엇입니까? – koala

+0

많은 감사, 내가 일주일 동안 일해온 문제를 해결했습니다! 신의 축복이있어! –

관련 문제