2011-12-05 16 views
4

解決策が必要です。列見出しを含むgridviewのビューモデルc#

グリッドビューのビューモデルを作成する必要があります。このビューモデルは厳密に型指定されたものでなければなりません。例。

List<Person> lstPersons=new List<Person>(); 

このようなものです。また、これで私はカスタム列ヘッダー名を持つことができるはずです。私はこのようなAutoGenerateColumns="True"

class Person 
{ 
     [DisplayName("Person Name")] 
     public string name { get; set; } 
} 

、のようなものを有効にすると、データアノテーションで行くことができます。しかし、私はこれに2つの問題があります。

  1. 実行時にこの表示名を変更する方法を教えてください。

  2. 私はRADARridViewを使用しています。私がAutoGenerateColumns="True"ShowColumnFooters="True"を使用していると、UI全体が突っ込まれてしまいます。私はこれがtelerikのコントロールでは誤りだと思う。だから私はXAMLのすべての列を定義し、それぞれのバインディングパスを追加する必要があります。

とにかく、これは私が思うようにDataTableで可能です。私はデータテーブルが非常に古いstructと重いオブジェクトであると感じています。

これを達成するためにViewModelを作成するにはどうすればよいですか?助言がありますか ?

質問は自由にしてください。上記の説明がすべての人にはわかりません

答えて

1

引き続きDisplayName属性をyに使用できます私たちのモデルですが、あなたが指摘したように、実行時に変更することはできません。そのためには、

public PeopleGridViewModel 
{ 
    public ObservableCollection<Person> People; 
    public Dictionary<string, string> PersonColumnHeaders; 

    public PeopleGridViewModel() 
    { 
     // 1. write C# here to snag the property names from the typeof(Person) 
     // 2. get the DisplayName attribute value for that property too. 
     // 3. add the propertyName.ToString() and the DisplayName string to the dictionary as a key/value pair. 

     // the result is you have a collection of column headers that start with the defaults from the propertys on the object... but they can be manipulated at run-time, and you don't havem them 100% hard typed like in adcool's example. 
    } 
} 

を移入し、あなたのViewModelで辞書を実装する私はあなたが示唆したようにショーの列フッターの契約は、Telerikの問題だと思います。

1

これを試してください。discussion列ヘッダーをバインドするデータについて

1

私はあなたがOT表示が固定されたい列と仮定....ので、あなたのViewModelこれはトリックを行う可能性があります

class MyViewModel 
{ 
     //Implement Properties nad proper binding in Xaml and INotifyPropertyChanged for every property that you need on View Level 
     ObservableCollection<Persons> persons; 
     string columnheader1; 
     string columnheader2; 
     string columnheader3; 

} 

XAML

 <telerik:RadGridView.Columns> 

      <telerik:GridViewDataColumn DataMemberBinding="{Binding UserName}" Width="200"> 

       <telerik:GridViewDataColumn.Header> 

        <TextBlock Text="{Binding Columnheader1}"></TextBlock> 

       </telerik:GridViewDataColumn.Header> 

       </telerik:GridViewDataColumn> 

      <telerik:GridViewDataColumn Header="{Binding Columnheader2}" DataMemberBinding="{Binding IsOnline}" MinWidth="200" Width="*"/> 

      <telerik:GridViewDataColumn Header="{Binding Columnheader3}" DataMemberBinding="{Binding LastActivityDate}" MinWidth="200"/> 

     </telerik:RadGridView.Columns> 

のようになります。 ....

関連する問題