Модераторы: gambit, Kefir, Partizan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с GridView 
:(
    Опции темы
drdoom
Дата 1.12.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 29.1.2008
Где: Саратов

Репутация: нет
Всего: 1



Вообщем вот такая вот проблема.
Есть форма которая биндиться к данным, а точнее ее ListView это делает следующим образом 
Код

  <ListView Name="lw" Grid.Row="1" ItemsSource="{Binding Data}" View="{Binding ViewSettings.GridView, Mode=TwoWay}" diag:PresentationTraceSources.TraceLevel="High">

так вот Грид вью биндиться к классу ViewSettings. Который определен следующим образом
Код

public class ViewSettings : INotifyPropertyChanged
{
......
 private GridView gridView;
        public GridView GridView
        {
            get { return gridView;} 
            set
            {
                gridView = value;
                OnPropertyChanged("GridView");
            }
        } 
......
        private void OnPropertyChanged(string propName)
        {
            MessageBox.Show("Чето изменилось");
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }
......
}

в GridView есть контекстное меню на Заголовке. В этом контекстом меню просто перечислены все столбцы находящиеся в GridView.
Вот в этой функции создается это контекстное меню
Код

  public static ContextMenu GreateContextMenu(ArrayList columnInfoCollection)
        {
            var contextMenu = new ContextMenu();
            foreach (ColumnInfo columnInfo in columnInfoCollection)
            {
                var menuItem = new MenuItem
                {
                    Header = columnInfo.Header,
                    IsCheckable = true,
                    IsChecked = (!columnInfo.Hidden)
                };
                contextMenu.Items.Add(menuItem);
            }
            return contextMenu;
        }


Как вы заметили у элементов есть свойство, которое определяет Стоит ли там галочка или нет. Я предпологал что когда я буду кликать на элементы контекстного меню то будет изменяться GridView и вызываться метод  OnPropertyChanged, где я смогу обработать это изменение, но такого не происходит. 
Почему это происходит не пойму.
Помогите плиз. Зараниее спасибо
PM MAIL ICQ   Вверх
Partizan
Дата 1.12.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



drdoom, 

Цитата

Почему это происходит не пойму.


Потому, что значение поля gridView остаётся прежним...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
drdoom
Дата 1.12.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 29.1.2008
Где: Саратов

Репутация: нет
Всего: 1



Partizan, А каким образом мне узнать о том что я что то поменял в контекстом меню? причем и с помощью связывания, а не посредством вызова события у элементов контекстного меню
PM MAIL ICQ   Вверх
Partizan
Дата 1.12.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



drdoom, обработчик нажатия на MenuItem покажите


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
drdoom
Дата 1.12.2008, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 29.1.2008
Где: Саратов

Репутация: нет
Всего: 1



вот подписка 
Код

        public static ContextMenu GreateContextMenu(ArrayList columnInfoCollection)
        {
            var contextMenu = new ContextMenu();
            foreach (ColumnInfo columnInfo in columnInfoCollection)
            {
                var menuItem = new MenuItem
                {
                    Header = columnInfo.Header,
                    IsCheckable = true,
                    IsChecked = (!columnInfo.Hidden)
                };
                menuItem.Click+=menuItem_Click;//подписка
                contextMenu.Items.Add(menuItem);
            }
            return contextMenu;
        }

вот обработчкик
Код

        private static void menuItem_Click(object sender, RoutedEventArgs e)
        {
            //здесь делать что-то
        }
проблема в том что этот метод статичный и я не могу  в нем изменить GridView

PM MAIL ICQ   Вверх
Partizan
Дата 1.12.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



drdoom, 

Цитата

Я предпологал что когда я буду кликать на элементы контекстного меню то будет изменяться GridView и вызываться метод  OnPropertyChanged, где я смогу обработать это изменение, но такого не происходит.


Интересно каким образом GridView должен поменяться после клика


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
drdoom
Дата 1.12.2008, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 29.1.2008
Где: Саратов

Репутация: нет
Всего: 1



ну я для проверки поперетаскивал столбцы в нем и менял их ширину, разве он при таких действиях не должен меняться? 
PM MAIL ICQ   Вверх
Partizan
Дата 1.12.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



drdoom, вы ж работаете с одним и тем же объектом...когда вы изменяете ширину столбца, объект GridView остаётся тот же...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
drdoom
Дата 1.12.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 29.1.2008
Где: Саратов

Репутация: нет
Всего: 1



Partizan, понятно, как же тогда мне отследить изменения в контекстном меню? без события всмысле
PM MAIL ICQ   Вверх
Partizan
Дата 1.12.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



drdoom, биндиться к MenuItem.IsChecked



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
drdoom
Дата 1.12.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 29.1.2008
Где: Саратов

Репутация: нет
Всего: 1



Partizan, точно блин, чет я ступил) спасибо)
PM MAIL ICQ   Вверх
drdoom
Дата 2.12.2008, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 29.1.2008
Где: Саратов

Репутация: нет
Всего: 1



А как мне прибиндиться к этому самому IsChecked
вот так вот не проканывает
Код

 IsChecked =new Binding("ViewSettings.ColumnInfoCollection["+columnInfoCollection.IndexOf(columnInfo)+"].Hidden")

PM MAIL ICQ   Вверх
drdoom
Дата 2.12.2008, 02:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 29.1.2008
Где: Саратов

Репутация: нет
Всего: 1



вот я короче как прибиндился 
Код

                var menuItem = new MenuItem
                                   {
                                       Header = columnInfo.Header,
                                       IsCheckable = true,
                                   };
                Binding binding = new Binding("ViewSettings.VisibleStatusCollection[" + columnInfoCollection.IndexOf(columnInfo) + "]");
                binding.Mode = BindingMode.TwoWay;
                menuItem.SetBinding(MenuItem.IsCheckedProperty,binding);

вот свойство VisibleStatusCollection
Код

private List<bool> visibleStatusCollection;
        public List<bool> VisibleStatusCollection
        {
            get { return visibleStatusCollection; }
            set
            {
                visibleStatusCollection = value;
                OnPropertyChanged("ViewSettings.VisibleStatusCollection");
            }
        }

бинидться нормально то ест значения берет, но когда я кликаю на одном из пунктов контекстного меню, событие OnPropertyChange не вызывается
всю голову уже об стену разбил, почему не работает?
PM MAIL ICQ   Вверх
Partizan
Дата 2.12.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



drdoom, попробуйте поменять List на ObservableCollection


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
drdoom
Дата 2.12.2008, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 29.1.2008
Где: Саратов

Репутация: нет
Всего: 1



спасибо вроде работает)
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0614 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.