のは、私は次のようにドメインモデルを持っているとしましょう:私はこのようなデータグリッドにバインドUserList
と呼ばれるこれらのObservableCollection
を、持っているWPF MVVMでプロキシオブジェクトなし派生プロパティにバインド
class User {
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
public int Age { get; set; }
// tons of other stuff
}
:
<dg:DataGrid ItemsSource="{Binding Path=UserList}" SelectedIndex="{Binding Path=Selecteduser}">
<dg:DataGrid.Columns>
<dg:DataGridTextColumn Header="Name" Binding="{Binding Path=FirstName, Mode=OneWay}" />
<dg:DataGridTextColumn Header="Age" Binding="{Binding Path=Age, Mode=OneWay}" />
</dg:DataGrid.Columns>
</dg:DataGrid>
ここで、ユーザーのフルネームのグリッド列を追加することにしました。私のUser
オブジェクトにはこのプロパティはありませんが、私にUser
オブジェクトを渡すと簡単に計算されます。 User
のプロキシクラス(別名ビューモデル)を作成せずに、このプロキシを処理するコードを大量に書き換えたり、ドメインオブジェクトからプロキシオブジェクトに状態をコピーしたりすることなく、私のUser
オブジェクトのそのような派生「プロパティ」にバインドする方法?
きれいで明白な解決方法は拡張方法ですが、明らかにその方法にバインドすることはできません。
グリッドにはこの列のを渡したいと思っています。私はUserと、これが何であるかを示すいくつかのキー(例: "fullname")を渡して、使用するデータを渡します列のために。
'MultiBinding StringFormat'は、私の実際の場合(文字列の書式以上です)ではなく、私の例の場合には完璧です。しかし、IValueConverterは、医師が注文したものとまったく同じです。 :) WPFのプログラマーはおそらくすでに知っているだろうが、私はよく知られていないコードベースで混乱している。私はそれが存在しなければならないようなものを考え出したが、それがどのように見えるかはわからなかった。私のグーグルグーグルでは、私は 'IValueConverter'に導かれましたが、バインディング文字列がありませんでした。ありがとう。 :) – Mud