2017-04-12 18 views
0

.resxファイルから2つの文字列をバインドする方法とViewModelからDataGrid列ヘッダーにバインドする方法以下のコードはResourcesファイルからの文字列のみをバインドします。WPF - DataGrid列ヘッダーの.resxとVMの2つの文字列をバインドする

<DataGridTextColumn Binding="{Binding Length}"> 
    <DataGridTextColumn.Header> 
     <TextBlock> 
      <Run Text="{x:Static p:Resources.Length}" /> 
      <Run Text="{Binding LengthUnit}" /> 
     </TextBlock> 
    </DataGridTextColumn.Header> 
</DataGridTextColumn> 

VM:

public string LengthUnitName { 
    get { return _lengthUnitName; } 
    set { SetProperty(ref _lengthUnitName, value); } 
} 
+0

どこLengthUnitプロパティです。罰金? – mm8

+0

@ mm8 ViewModelのプロパティ – IBRA

答えて

1

HeaderTemplateを定義します。

<DataGridTextColumn Binding="{Binding Length}"> 
    <DataGridTextColumn.HeaderTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <Run Text="{x:Static p:Resources.Length}" /> 
       <Run Text="{Binding Path=Items[0].LengthUnit, RelativeSource={RelativeSource AncestorType=DataGrid}, Mode=OneWay}" /> 
      </TextBlock> 
     </DataTemplate> 
    </DataGridTextColumn.HeaderTemplate> 
</DataGridTextColumn> 

LengthUnitプロパティは、あなたがこのように結合することができるビューモデルで定義されている場合:

<Run Text="{Binding Path=DataContext.LengthUnit, RelativeSource={RelativeSource AncestorType=DataGrid}, Mode=OneWay}" /> 
+0

それは動作しませんでした。デバッグしてビューモデルから受け取った値をチェックするコンバータを追加しましたが、コンバーターコードに到達しません。私はあなたが提供した両方の方法を試しましたがどちらも機能しませんでしたまた、私はそれが正しく設定されていることを確認するためにコンストラクタからLengthUnitを設定しましたが、うまくいきませんでした。 – IBRA

+0

実際にヘッダー*テンプレート*をDataTemplateに設定しましたか? – mm8

+0

ああ! 、申し訳ありませんが、私の悪い、HeaderTemplateに注意を払っていない:P – IBRA

関連する問題