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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Silverlight - треш в выполнении кода, это не описать, это пипец какойто 
:(
    Опции темы
MaxWave
Дата 29.6.2011, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Незнаю что это, либо я совсем дурак, либо о чем то незнаю.

Есть обчныя приложуха по управлению правами пользователей: SL4+WCF RIA Services. Все через CodeBehind (не стал я пока морочиться с MVVM)

Все что происходит я заскринкастил, ибо все это описывать - толку не будет.. Особую уличную магию надо видеть!


Смотрим (простите за широкий формат, по другому было никак): http://www.youtube.com/watch?v=HG-F5Pz0Yq4



Постарался сделать все наглядно. Вроде ничего сложного.
Баг происходит только когда сортируем юзеров при выборке. Сортировку делает DataGrid - в дела семейные не вмешивался.



Это сообщение отредактировал(а) MaxWave - 29.6.2011, 14:10
PM MAIL   Вверх
v00d00
Дата 29.6.2011, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Будь добр скинь сюда код который бочит. Каждый раз выыскивать его на видео геморойно.
PM MAIL   Вверх
MaxWave
Дата 29.6.2011, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код элементарный, никаких ошибок не вижу. Но SL Runtime помоему жжет...
Код

 private void addUserButton_Click(object sender, RoutedEventArgs e)
        {
            SelectItemWindow wnd =new SelectItemWindow(new UsersView(),"Выбор пользователя"){Width = 600, Height = 600};
            wnd.Show();
            wnd.Selected+= (s, e2) =>
                               {
                                   
                                  
                                   RoleUser ad = wnd.SelectedItems[0] as RoleUser;
                                   
                                   AddUserToRole(ad.AdUser, Role);
                                   

                               };
        }

        //Добавляем пользователя в группу
        public static void AddUserToRole(AdUser user, Role role)
        {
            //звучит ужасно, но такое ощущение что код 3. выполняется раньше чем нижеследующий IF
            //проверяем, нет ли уже юзера в группе (аналогично Any)
            if (role.RoleUsers.Where(i => i.AdUserSid == user.Sid && i.RoleId == role.RoleId).Count()>0)
            {

                //1.
                    MessageBox.Show("Пользователь {0} уже есть в этой группе".f(user.HumanName));
                return;
            }

            //2.
            //MessageBox.Show(role.RoleUsers.Count.ToString());

            RoleUser roleUser= new RoleUser();
            roleUser.AdUserSid = user.Sid;
            roleUser.RoleId = role.RoleId;
            roleUser.AdUser = user;
            //MessageBox.Show("Add");
           //3.
            role.RoleUsers.Add(roleUser);
           user.Roles.Add(role);
        }


Это сообщение отредактировал(а) MaxWave - 29.6.2011, 14:43
PM MAIL   Вверх
v00d00
Дата 29.6.2011, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можешь показать код который запускает событие Selected?

Такое ощущение что оно срабатывает дважды
PM MAIL   Вверх
MaxWave
Дата 29.6.2011, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Selected срабатывает один раз, по крайней мере в дебагере. На видео видно, что точка останова срабатывает один раз. Так же и без отладки, второй MessageBox срабатывает так же один раз.

Код

public partial class SelectItemWindow : ChildWindow
    {
        public event EventHandler Selected=delegate {};
        public IList SelectedItems;
        private readonly ISelectable _selectable;

        public SelectItemWindow(ISelectable selectable, string title)
        {
            InitializeComponent();
            _selectable = selectable;
            selectableContent.Content = _selectable;
            _selectable.DoubleClicked += (s, e) =>
                                             {
                                                 //вызываем при двойном щелчке на элементе
                                                 Selected(this, null); this.DialogResult = true;
                                             };
            _selectable.SelectionChanged += (s, e) => { SelectedItems = _selectable.SelectedItems; };
            this.Title = title;
        }

        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            //срабатывает только при нажатии на кнопку ОК
            Selected(this, null);
            this.DialogResult = true;
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
        }
    }


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


 




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


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

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