powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Получения данных из DataGrid WPF MVVM
25 сообщений из 450, страница 12 из 18
Получения данных из DataGrid WPF MVVM
    #38470390
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanА вот ValidationRule мне не нравится - никакого фидбека во VM, что имхо очень странно.Пробежаться по визуальному дереву и найти есть ли Validation.GetHasError(element) == true не проблема. Или о каком фидбэке идёт речь?
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470797
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa1. Муслима, называй вещи своими именами - лисапед, который тянет только на концепт лабораторной работы.
Можешь представить, во что превратятся твои изобретения, если будет несколько сотен классов и форм.
Вместо нормального IoC и сервиса навигации, которые присутствуют в нормальных фреймворках, и которые ты не осилил,
две помойные ямы.
2. Сборка мусора тема для тебя неподъемная и я даже не буду ее затрагивать.
А winforms упомяну, тк ты здесь не раз пачкал другим мозги и на голубом глазу заявлял, что в нем на автомате делается отписка от событий. Это очередная твоя тупость, ничего подобного нет. Попробуй в статическом классе подписаться на событие и ты намертво прибьешь форму гвоздями. Все дело в том, что ты привык говнокодить с обработчиками в самой форме, посему все удалялось.
1. Долбосев, я и стараюсь называть вещи своими именами. Просто у тебя опять кончились мозги для того, чтобы осилить факт наличия IoC и сервиса окон (IDataContext и IWindowService). Эти сервисы там есть и только через них идет вся работа, дурилко картонное. Ты как не умел читать код, так и не научился. Читаешь, видимо, задницей и задаешь много тупых вопросов.
2. Не смеши мои носки по поводу сборки мусора, ты сольёшь эту тему через 5 минут дискуссии очередными жалкими потугами, типа мембершипов и генераций сборок в памяти. Уж не позорился бы, клоун. Во-вторых, причем тут подписка на событие в статическом классе? Где у меня в WPF и WinForms статика? Я не сомневаюсь, что в твоих нетленках одна статика, но тем ты и чудесен, что являешься обычной тупой обезьяной без грамма ума и фантазии.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470801
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПробежаться по визуальному дереву и найти есть ли Validation.GetHasError(element) == true не проблема. Или о каком фидбэке идёт речь?
Ну и еще рекурсивно пробежаться по всем чилдам через:
Код: c#
1.
LogicalTreeHelper.GetChildren(instance).OfType<DependencyObject>().All(child => RecursiveValidate(child))
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470811
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понятно, почему не сделали в WPF что-то типа этого . Вызываешь в модели представления ModelState.IsValid и получаешь ответ. Приходится писать что-то типа этого 15159049 .
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470856
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

и мне это непонятно. Чтобы пробежаться по дереву надо иметь всегда ссылку на свою View. А это в моем логике невозможно). Поэтому не вижу повода уходить от DataErrorInfo.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470874
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanЧтобы пробежаться по дереву надо иметь всегда ссылку на свою View. А это в моем логике невозможно).
Я выкрутился так, собственно в начале и писал об этом:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
public class WindowService : IWindowService
{
    public Window ActiveWindow { get { return Application.Current.Windows.OfType<Window>().SingleOrDefault(x => x.IsActive); } }

    private bool Validate(DependencyObject instance)
    {
        return !Validation.GetHasError(instance) && LogicalTreeHelper.GetChildren(instance).OfType<DependencyObject>().All(child => Validate(child));
    }

    public bool IsValid { get { return Validate(ActiveWindow); } }        

    public EmployeeViewModel OpenEmployeeDetailWindow(Employee employee)
    {
        var view = new EmployeeDetailWindow();
        view.Owner = ActiveWindow;
        var vm = new EmployeeViewModel 
        { 
            EmployeeId = employee.EmployeeId, 
            FirstName = employee.FirstName, 
            LastName = employee.LastName, 
            Birthday = employee.Birthday,
            Fired = employee.Fired,
            Stage = employee.Stage 
        };
        view.DataContext = vm;
        return view.ShowDialog() == true ? vm : null;
    } 
}



А уже из ICommand родительского окна через инверсию ты обращаешься к IWindowService. Таким образом, очень удобно писать mvvm. Если нужно вмешательство к визуальным элементам, ты это делаешь через слабосвязанный IWindowService.

Вот, например, нужно по кликам на дереве обновлять на лету грид:

view
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
<Grid>
    <TreeView Name="departmentsTree" ItemsSource="{Binding DepartmentsTopLevel}" HorizontalAlignment="Left" Width="232">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Childrens}">
                <TextBlock Text="{Binding Title}"/>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
        <TreeView.ItemContainerStyle>
            <Style>
                <Setter Property="TreeViewItem.IsExpanded" Value="True"></Setter>
            </Style>
        </TreeView.ItemContainerStyle>
    </TreeView>
    <DataGrid ItemsSource="{Binding Path=Employees}" AutoGenerateColumns="False" CanUserAddRows="False" Margin="237,0,0,0">
        <DataGrid.Columns>
            <DataGridTextColumn IsReadOnly="True" Header="Фамилия" Binding="{Binding LastName}" Width="100" />
            <DataGridTextColumn IsReadOnly="True" Header="Имя" Binding="{Binding FirstName}" Width="150" />
            <DataGridTextColumn IsReadOnly="True" Header="Дата рождения" Binding="{Binding Birthday, StringFormat=\{0:dd.MM.yyyy\}}" Width="100">
                <DataGridTextColumn.CellStyle>
                    <Style>
                        <Setter Property="TextBlock.TextAlignment" Value="Center"/>
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>



view model
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
public class OrganizationViewModel : ViewModelBase
{
    public IDataContext Context;
    public IWindowService Service;

    public OrganizationViewModel()
    {
        Context = new DataContext(); // todo IoC resolve
        Service = new WindowService(); // todo IoC resolve
    }
       
    public IEnumerable<Department> DepartmentsTopLevel
    {
        get
        {
            return Context.GetDepartments().Where(d => d.Id == 0);
        }
    }

    private Department _currentDepartment;
    public Department CurrentDepartment
    {
        get
        {
            return _currentDepartment;
        }
        set
        {
            _currentDepartment = value;
            OnPropertyChanged(() => CurrentDepartment);
        }
    }

    private ObservableCollection<Employee> _employees;
    public ObservableCollection<Employee> Employees
    {
        get
        {
            return _employees;
        }
        set
        {
            _employees = value;
            OnPropertyChanged(() => Employees);
        }
    }
}



оконный сервис
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public void OpenOrganizationWindow()
{
    var view = new OrganizationWindow();
    view.Owner = ActiveWindow;
    var vm = new OrganizationViewModel();
    view.DataContext = vm;
    var tree = (TreeView)view.FindName("departmentsTree");            
           
    tree.SelectedItemChanged += delegate(object sender, RoutedPropertyChangedEventArgs<object> e)
    {                                
        vm.CurrentDepartment = e.NewValue as Department;
        var employees = vm.Context.GetEmployees().Where(d => d.Department.Id == vm.CurrentDepartment.Id);
        vm.Employees = new ObservableCollection<Employee>(employees);
    };

    view.Show();
    view.Closed += (a, b) => { Application.Current.MainWindow.Focus(); };
}

...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470884
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, очень расстроился, что в WPF до сих пор нет поддержки ICommand в EventTrigger. Так ты сразу намапился в команду из TreeView и делов. Или можно через InvokeCommandAction из System.Windows.Interactivity?
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470899
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУИли можно через InvokeCommandAction из System.Windows.Interactivity?
Отлично, так работает! Можно убирать гавнокод с SelectedItemChanged из IWindowService :)

Код: xml
1.
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"



Код: xml
1.
2.
3.
4.
5.
<i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectedItemChanged">
                    <i:InvokeCommandAction Command="{Binding SelectedItemChangedCommand}" />
                </i:EventTrigger>
</i:Interaction.Triggers>
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470903
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КПробежаться по визуальному дереву и найти есть ли Validation.GetHasError(element) == true не проблема. Или о каком фидбэке идёт речь?
Ну и еще рекурсивно пробежаться по всем чилдам через:
Код: c#
1.
LogicalTreeHelper.GetChildren(instance).OfType<DependencyObject>().All(child => RecursiveValidate(child))

Ну само собой пройти по всему дереву. Вообще не проблема.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470904
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУИли можно через InvokeCommandAction из System.Windows.Interactivity?Да.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470930
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУИли можно через InvokeCommandAction из System.Windows.Interactivity?Да.
Тогда я вообще не понимаю, кули ты прибил свой моцк к этому кодебехайнду :) Онли mvvm, не?
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470937
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...
Да.
Тогда я вообще не понимаю, кули ты прибил свой моцк к этому кодебехайнду :) Онли mvvm, не?Может, я не умею делать MVVM? :-)
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470938
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМожет, я не умею делать MVVM? :-)
Троллишь?
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470944
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КМожет, я не умею делать MVVM? :-)
Троллишь? Иногда можно.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470946
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИногда можно.
Вообщем, задача: пересадить нечестный РЖД на честный MVVM
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470979
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КИногда можно.
Вообщем, задача: пересадить нечестный РЖД на честный MVVM У меня и так всё MVVM, только в моём его понимании. Так что не надо тут! :-)
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38470995
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КУ меня и так всё MVVM, только в моём его понимании. Так что не надо тут! :-)
15108719 ???

...


...
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38471007
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

используй EventToCommand из MvvmLight. Там есть очень полезная штука -
Код: c#
1.
 EventToArgs=true


:)
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38471010
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КУ меня и так всё MVVM, только в моём его понимании. Так что не надо тут! :-)
15108719 ???Это ничему не противоречит. Я считаю CodeBehind/XAML - одной из разновидностей пар ViewModel/View.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38471013
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanМСУ,
используй EventToCommand из MvvmLight. Там есть очень полезная штука -
Код: c#
1.
 EventToArgs=true


:)Проще свой написать. Там работы на 5 минут. :-)
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38471020
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЯ считаю CodeBehind/XAML - одной из разновидностей пар ViewModel/View.
Жжешь, мужик :)

P.S. Кодбехайнд - это часть View, никакого отношения к модели представления не относится, 100%. Верь мне.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38471024
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КЯ считаю CodeBehind/XAML - одной из разновидностей пар ViewModel/View.
Жжешь, мужик :)

P.S. Кодбехайнд - это часть View, никакого отношения к модели представления не относится, 100%. Верь мне.Ну мне так нравится. Жалко что ли? :-)
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38471026
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanМСУ,

используй EventToCommand из MvvmLight. Там есть очень полезная штука -
Код: c#
1.
 EventToArgs=true


:)
В топку все эти левые тулкиты :) Тем более, зачем мне левый EventToCommand, если есть штатный InvokeCommandAction.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38471030
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу мне так нравится. Жалко что ли? :-)
Ну не то, чтобы жалко, но немного обидно
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38471034
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КНу мне так нравится. Жалко что ли? :-)
Ну не то, чтобы жалко, но немного обидно За архитекторов-неудачников из Микрософта? :-)
...
Рейтинг: 0 / 0
25 сообщений из 450, страница 12 из 18
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Получения данных из DataGrid WPF MVVM
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]