viewmodel для gridview с заголовками столбцов c # - PullRequest
4 голосов
/ 05 декабря 2011

Мне нужно решение для этого.

Мне нужно создать модель представления для вида сетки.Эта модель представления должна быть строго типизированной.ех.

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

как то так.Кроме того, с этим я должен иметь возможность иметь собственные имена заголовков столбцов.Я могу пойти с аннотацией данных с включением AutoGenerateColumns="True" как,

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

что-то вроде этого.Но у меня есть 2 проблемы с этим.

  1. Я не знаю, как изменить это отображаемое имя во время выполнения.

  2. Я использую telerik RADGridView.с этим, когда я использую AutoGenerateColumns="True" и ShowColumnFooters="True", весь пользовательский интерфейс застревает.Я думаю, что это ошибка с Telerik Controls.Поэтому я должен определить все столбцы в XAML и добавить путь привязки для каждого из них.

В любом случае, это возможно с DataTable, я думаю.но я чувствую, что таблицы данных - это очень старая структура и тяжелый объект.

Как создать Viewmodel для достижения этой цели?Какие-либо предложения ?

Не стесняйтесь задавать любые вопросы.Я не уверен, что приведенное выше описание понятно всем.

Ответы [ 3 ]

1 голос
/ 12 декабря 2011

Я предполагаю, что столбцы, которые вы хотите отобразить, являются фиксированными .... поэтому ваша 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> 

Это может сработать ..... :)

1 голос
/ 13 декабря 2011

Вы можете продолжать использовать атрибут DisplayName в своей модели, но, как вы указали, не можете изменить его во время выполнения. Для этого внедрите словарь в вашей ViewModel, который заполняет

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.
    }
}

Я думаю, что сделка с нижними колонтитулами в колонке шоу - это проблема Telerik, как вы предложили.

1 голос
/ 05 декабря 2011

Попробуйте обсуждение о привязке данных к заголовку столбца.

...