Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Взаимодействие UserControl в рамках приложения / 25 сообщений из 99, страница 1 из 4
15.05.2019, 17:09
    #39813701
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
Коллеги, нужен совет по обмену данными между взаимодействующими панелями (UserControl в среде WPF) в рамках одного приложения.
Пример взаимодействия:
<Пенель А> запрашивает работу <Панели Б>. Для чего обращается к MainWindow (используется интерфейс) передавая имя панели и объект this.
MainWindow деактивирует <Панель А>, создаёт <Панель Б> и передает ей управление. Но нужно как-то передать параметры из <Панель А> в <Панель Б>.
Сейчас задействуется класс глобальных параметров:
1-ый параметр - имя "глюонного" класса для обмена информацией
2-ой параметр - ссылка на объект "глюонного" класса.
Схема передачи данных из <Панель Б> в <Панель А> аналогична.
Эта схема меня не устраивает - много "глюонных" классов, нужных только для перемещения данных.
Может есть лучшие схемы взаимодействия панелей?
...
Рейтинг: 0 / 0
15.05.2019, 17:15
    #39813703
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
не понятно, панели не должны ничего передавать, они должны отображать.
у окна есть 2 состояния, в 1 состоянии отображается панель А, во втором панель Б. Всё остальное происходит на уровне модели представления.
Либо опишите подробнее, чего вы хотите добиться.
...
Рейтинг: 0 / 0
15.05.2019, 19:04
    #39813755
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
>Roman Mejtes, сегодня, 17:15 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21885601][21885601]/url]
>...Либо опишите подробнее, чего вы хотите добиться.
<
1. Надо передать параметры запуска для <Панель Б> из <Панель А>.
2. Надо передать результаты работы <Панель Б> в <Панель А>
3. Панель есть UserControl в WPF.
...
Рейтинг: 0 / 0
15.05.2019, 19:20
    #39813756
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
ВМоисеев,
Панель не может иметь результатов работы. Это холст мешковины или подрамник.
...
Рейтинг: 0 / 0
15.05.2019, 19:24
    #39813757
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
ВМоисеев,
Вам надо разобрать демо пример по событиям и биндингу. Событиям системным, не своим. Типа смена фокуса или мышка.
А потом свои события и биндинг.
И уже потом приходи с панелью А и Б.))
...
Рейтинг: 0 / 0
15.05.2019, 19:41
    #39813758
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
>Petro123, сегодня, 19:20 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21885684][21885684]
>Панель не может иметь результатов работы. Это холст мешковины или подрамник.
<см. здесь .
...
Рейтинг: 0 / 0
15.05.2019, 20:14
    #39813762
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
>Petro123, сегодня, 19:24 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21885685][21885685]
>...И уже потом приходи с панелью А и Б.))
<Пришёл. Пример(см.слайд):
1. <Панель А> - Группы
2. <Панель Б> - ввод фрагмента строки фильтра (LIKE)
<Панель А> вызывает <Панель Б> и ждет фрагмент строки фильтра
...
Рейтинг: 0 / 0
15.05.2019, 20:21
    #39813765
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
ВМоисеев>Petro123, сегодня, 19:20 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21885684][21885684]
>Панель не может иметь результатов работы. Это холст мешковины или подрамник.
<см. здесь .посмотрел. И что?

ВМоисеевПришёл. Пример(см.слайд):
Рано пришел. Ничего не сделал.
...
Рейтинг: 0 / 0
15.05.2019, 20:47
    #39813769
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
>Petro123, сегодня, 20:21 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21885712][21885712]
>посмотрел. И что?
<тогда посмотри на это (Плитка и Панель - одно и тоже):
Код: 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.
using System;
using System.Windows;
using System.Windows.Controls;

namespace ns_Хранилище {
  public partial class uc_Группы_Фильтр : UserControl, I_Плитка {
    IMainWindow при;  //-- интерфейс MainWindow
    I_Плитка зак;
    Object xuc;
    public uc_Группы_Фильтр(MainWindow omw, Object oUC) {
      InitializeComponent();
      зак = (I_Плитка)oUC;
      при = (IMainWindow)omw;
      xuc = oUC;
    }
    //-- Обработка загрузки панели 
    //----------------------------------------------------------------------
    private void xuc_Фильтр_Loaded(object sender, RoutedEventArgs e) {
      txb_ГруппыПФ.Text = (xuc as uc_Группы).str_ГруппаПФ;
      txb_ГруппыПФ.Focus();
    }
    private void btc_Выбор_Click(object sender, RoutedEventArgs e) {
      зак.uc_Подстановка("uc_Группы_Фильтр", this);
      при.uc_Удалить();         //-- Удалить верхнюю (активную) панель
    }

    //-- I_Плитка
    //--------------------------------------------------------
    public void uc_Подстановка(string str, Object obj) { }
    public void uc_ЗапросДанных() { }
    public void uc_cmdVisibility(Visibility v) { }
  }
}



Код: 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.
28.
29.
30.
31.
32.
33.
34.
<UserControl
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:System="clr-namespace:System;assembly=mscorlib" x:Name="xuc_Фильтр" x:Class="ns_Хранилище.uc_Группы_Фильтр" 
             mc:Ignorable="d" Height="90" Width="290" Loaded="xuc_Фильтр_Loaded">
  <Grid x:Name="grd_Фильтр"  Background="#FFA7B2B1">
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="30"/>
      <ColumnDefinition Width="250"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
      <RowDefinition Height="30"/>
      <RowDefinition Height="60"/>
    </Grid.RowDefinitions>
    <Border Grid.Row="1" Grid.Column="0"  Background="#FFA7B2B1"/>

    <Label Grid.Column="1" Grid.Row="0" x:Name="lbl_Группы"  HorizontalAlignment="Center" VerticalAlignment="Center" Height="26" Width="198" Background="Yellow" Visibility="Visible" Content="Параметры фильтра группы" Margin="21,1,41,1" />
    <Label Grid.Column="1" x:Name="lbl_ГруппыПФ"  HorizontalAlignment="Center" VerticalAlignment="Center" Height="26" Width="102" Visibility="Visible" Content="Назв. группы" Margin="5,10,144,24" Grid.Row="1" RenderTransformOrigin="0.51,0.769" />

    <TextBox Grid.Column="1" Grid.Row="1" x:Name="txb_ГруппыПФ" HorizontalAlignment="Left" Height="23" Margin="121,13,0,0"  TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120" />

    <Button Grid.Column="0" Grid.Row="0" x:Name="btc_Выбор" Content="Button" HorizontalAlignment="Center" VerticalAlignment="Center" Width="26" Height="25" Click="btc_Выбор_Click" Margin="0,0,0,0" ToolTip="Подстановка" >
      <Button.ContentTemplate>
        <DataTemplate>
          <StackPanel Orientation="Horizontal">
            <Image Source="Ресурсы/GoToPrevious.bmp"/>
          </StackPanel>
        </DataTemplate>
      </Button.ContentTemplate>
    </Button>
  </Grid>
</UserControl>
...
Рейтинг: 0 / 0
15.05.2019, 20:57
    #39813770
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
ВМоисеевтогда посмотри на этолучше сначала ты
...
Рейтинг: 0 / 0
15.05.2019, 21:08
    #39813772
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
>Petro123, сегодня, 20:57 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21885726][21885726]
>лучше сначала ты
<Клиника, помочь ничем не могу
...
Рейтинг: 0 / 0
15.05.2019, 21:47
    #39813776
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
ВМоисеев,
Я как посмотрю на твои переменные
зак, при, хус
Так и смотреть не хочется))
...
Рейтинг: 0 / 0
16.05.2019, 15:35
    #39814125
Супер_Пав
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
Учитывая, что я виду события и имена у контролов, c MVVM сталкиваться вам не пришлось. А зря, почитайте, поможет
...
Рейтинг: 0 / 0
16.05.2019, 15:42
    #39814131
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
Petro123,

это не хус, а XUC, у него префиксы на английском, имена на русском, суффиксы на эльфийском.
Подозреваю, что UC - это UserControl, что такое X я не знаю, может eXtenede, может
но тугие трусы, мешают только плохому танцору :) нужно быть толерантнее, не факт, что он сам придумал такой способ именования, возможно это сложившаяся традиция в его компании
...
Рейтинг: 0 / 0
16.05.2019, 16:07
    #39814145
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
Roman Mejtes,
Ты профи - помогай. Я только фразе что панели передают работу возмутился.
...
Рейтинг: 0 / 0
17.05.2019, 19:55
    #39814787
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
ВМоисеев, меня гложут жуткие подозрения в знании Вами азов WPF.

1) Вы используете для вывода простого текста Label . Но это элемента для отображения контента данных, а не простого текста. Для текста его, конечно, можно использовать, но он избыточен для этого. Для вывода текста в WPF используется TextBlock - он и является приблизительным аналогом Label из WinForms

2) У Вас в UC не ни одной привязки! То есть UC не отображает данные! А что он тогда отображает? Для чего он, вообще, нужен?

3) Из предыдущих двух пунктов - Вы не знаете сто такое ДАННЫЕ и их ОТОБРАЖЕНИЕ. У Вас, скорее всего, нет понятия об MVVM. WPF очень сильно "заточен" под MVVM. Без MVVM можно использовать, но это крайне неудобно, и трудно. Возникает целая куча неспецифических для WPF проблем. Даже Ваша проблема возникла из-за отсутствия самих ДАННЫХ. Если бы данные были, то задачи их передачи от одного UC другому просто бы не возникло.

4) Вы не знаете что такое компоновка WPF элементов. Свойство Margin используется для задания расстояния между элементами, а не их расположения. Расположение элементов, в основном, определяется различными комбинациями контейнеров: Grid, StackPanel, WrapPanel и т.д.

P.S. Мой совет Вам - тормозните чуток и изучите основы. Без этого будет очень трудно создавать WPF приложения.
...
Рейтинг: 0 / 0
18.05.2019, 11:33
    #39814847
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
Eld Hasp,
Хороший пост и анализ.
Если в WinForm можно писать как угодно, то тут не получится.
...
Рейтинг: 0 / 0
18.05.2019, 12:32
    #39814855
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
Petro123Eld Hasp,
Хороший пост и анализ.
Если в WinForm можно писать как угодно, то тут не получится.В WinForms тоже как попало нельзя.
Просто по какой-то неведомой мной причине большинство "студенческих" WF приложений пишется без разделения данных и их отображения. А с таким подходом ничего серьёзного не напишешь.
Скорее всего, это связанно, с отсутствием в WF привязок. И, соответственно, для реализации полноценного MVVM надо кастомно в View реализовывать прослушку всех свойств ViewModel. Это сложно для подавляющего большинства преподавателей. И, соответственно, они не учат этому студентов.
Но в WF довольно просто использовать MVC паттерн. В нём уже функция обновления View возложена на контролер.
...
Рейтинг: 0 / 0
18.05.2019, 12:42
    #39814858
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
Eld HaspВ WinForms тоже как попало нельзя.нельзя но работать будет (с).
Сколько лет без биндинга писали).
А здесь работать не будет.
Eld HaspПросто по какой-то неведомой мной причине большинство "студенческих" WF приложений пишется без разделения данных и их отображения.
Значит не успевают по расчасовке).
Скажу по секрету, что иногда и MV*** оверхед и не нужен.
Удачи!
...
Рейтинг: 0 / 0
18.05.2019, 13:27
    #39814865
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
>Eld Hasp, вчера, 19:55 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21887597][21887597]
>1) Вы используете для вывода простого текста Label...
<Спасибо, учту.
>2) У Вас в UC не ни одной привязки!
<Зачем она в данном случае?
Этого вполне достаточно - txb_ГруппыПФ.Text = (xuc as uc_Группы).str_ГруппаПФ;
Я инженер и плодить лишнее - не мой стиль.
>3) Из предыдущих двух пунктов …
<Столько букв и столько же пустоты.
>4) Вы не знаете что такое компоновка WPF элементов…
<Использую Visual Studio, это её работа.
>P.S. Мой совет Вам - тормозните чуток и изучите основы. Без этого будет очень трудно создавать WPF приложения.
<А это мой Вам совет - смотрите в корень задачи и не увлекайтесь подгонкой под модное. Лишнее надо нещадно удалять.
Случайно обнаружил, что графические элементы в UserControl есть public. Удалю все ненужные "глюонные" классы
...
Рейтинг: 0 / 0
18.05.2019, 14:28
    #39814873
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
ВМоисеев<Зачем она в данном случае?
Этого вполне достаточно - txb_ГруппыПФ.Text = (xuc as uc_Группы).str_ГруппаПФ;
Я инженер и плодить лишнее - не мой стиль.ВМоисеев>4) Вы не знаете что такое компоновка WPF элементов…
<Использую Visual Studio, это её работа.С таким подходом не надо вообще брать WPF - это лишнее. WinForms вполне достаточно и проще. А взяв WPF ты нарушаешь свой собственный совет:ВМоисеевне увлекайтесь подгонкой под модноевот именно это ты сейчас и делаешь, взял модный фреймворк, разбираться как он работает не хочешь.
...
Рейтинг: 0 / 0
18.05.2019, 14:43
    #39814874
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
ВМоисеев>Я инженер и плодить лишнее - не мой стиль.
Как инженер инженеру.

Можно взять молоток (Модель) забить гвоздь и рассматривать его в микроскоп (View).
А можно заявить - зачем плодить лишние сложности и забить гвоздь микроскопом.

WPF элементы - это средства отображения данных. Можно ли их использовать для работы с самими данными.
Конечно, можно. Также как и микроскопом забить гвоздь.
Но эффективно ли это? Однозначно - нет!

В каких-то микро применениях, так ещё получится сделать. Но даже маленькое приложение уже вряд ли.
Как и с микроскопом - забить один-два гвоздя получится. А вот сколотить полочку уже вряд ли.
...
Рейтинг: 0 / 0
18.05.2019, 15:52
    #39814882
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
из всех местных преподов ни один не дал ссылку хоть на одну свою прогу (исключение - бешеный меринос)
...
Рейтинг: 0 / 0
18.05.2019, 16:13
    #39814883
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
ViPRosиз всех местных преподов ни один не дал ссылку хоть на одну свою прогу (исключение - бешеный меринос)а где твоя на WPF?
...
Рейтинг: 0 / 0
18.05.2019, 16:20
    #39814884
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимодействие UserControl в рамках приложения
>Eld Hasp, егодня, 14:43 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21887858][21887858]
>...Но эффективно ли это? Однозначно - нет!...
<Сударь, Вы хоть вдумайтесь, что за ахинею несёте - здесь же не митинг - я прошу коллег дать совет (идею) как обмениваться информацией между панелями (UserConrtol). Идея использования дополнительных ("глюонных") классов мне не понравилась, обсасываю вариант, когда класс А напрямую забирает информацию из графических элементов класса Б. Посмотрю с чем столкнусь.
Сейчас примерно так пытаюсь получить параметры фильтра:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    //-- Прием данных справочников
    public void uc_Подстановка(string name, object obj) {
      if (name == "uc_ФунПер_Фильтр") {
        str_ИмяФунПФ = (obj as uc_ФунПер_Фильтр).txb_ИмяФунПФ.Text;
        str_кНаимДогПФ = (obj as uc_ФунПер_Фильтр).txb_кНаимДогПФ.Text;
        bl_Разрешение = true;
        ЗапросДанных();
        return;
      }
     . . .  

так использую:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    //-- SELECT
    //====================================================================================
    public async void ЗапросДанных() {
      if (!bl_Разрешение) return;
      bl_Разрешение = false;
      //-- Готовим параметры запроса
      psp = new object[3][];
      psp[0] = new object[2] { "@pk_Entity", pk_Guid };
      string str = str_ИмяФунПФ;
      psp[1] = new object[2] { "@str_ИмяФун", (string.IsNullOrEmpty(str)) ? Convert.DBNull : str += "%" };
      str = str_кНаимДогПФ;
      psp[2] = new object[2] { "@str_кНаимДог", (string.IsNullOrEmpty(str)) ? Convert.DBNull : str += "%" };
      xrow = null; lst_Entity = null; lst_Entity = new List<row_Entity>();
      при.tmrStart(); await Task.Run(() => wsp.Entity_SP("au01_ФунПер_Sel", wsp.sp_Sel, psp, RowToEntity)); при.tmrStop();
      if (wsp.wspErr != null) { MessageBox.Show(wsp.wspErr, caption_Entity, MessageBoxButton.OK); }
   . . .
  
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Взаимодействие UserControl в рамках приложения / 25 сообщений из 99, страница 1 из 4
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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