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

ВМоисеевПришёл. Пример(см.слайд):
Рано пришел. Ничего не сделал.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39813769
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>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
Взаимодействие UserControl в рамках приложения
    #39813770
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевтогда посмотри на этолучше сначала ты
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39813772
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 20:57 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21885726][21885726]
>лучше сначала ты
<Клиника, помочь ничем не могу
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39813776
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Я как посмотрю на твои переменные
зак, при, хус
Так и смотреть не хочется))
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814125
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Учитывая, что я виду события и имена у контролов, c MVVM сталкиваться вам не пришлось. А зря, почитайте, поможет
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814131
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

это не хус, а XUC, у него префиксы на английском, имена на русском, суффиксы на эльфийском.
Подозреваю, что UC - это UserControl, что такое X я не знаю, может eXtenede, может
но тугие трусы, мешают только плохому танцору :) нужно быть толерантнее, не факт, что он сам придумал такой способ именования, возможно это сложившаяся традиция в его компании
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814145
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,
Ты профи - помогай. Я только фразе что панели передают работу возмутился.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814787
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев, меня гложут жуткие подозрения в знании Вами азов 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
Взаимодействие UserControl в рамках приложения
    #39814847
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld Hasp,
Хороший пост и анализ.
Если в WinForm можно писать как угодно, то тут не получится.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814855
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Eld Hasp,
Хороший пост и анализ.
Если в WinForm можно писать как угодно, то тут не получится.В WinForms тоже как попало нельзя.
Просто по какой-то неведомой мной причине большинство "студенческих" WF приложений пишется без разделения данных и их отображения. А с таким подходом ничего серьёзного не напишешь.
Скорее всего, это связанно, с отсутствием в WF привязок. И, соответственно, для реализации полноценного MVVM надо кастомно в View реализовывать прослушку всех свойств ViewModel. Это сложно для подавляющего большинства преподавателей. И, соответственно, они не учат этому студентов.
Но в WF довольно просто использовать MVC паттерн. В нём уже функция обновления View возложена на контролер.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814858
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld HaspВ WinForms тоже как попало нельзя.нельзя но работать будет (с).
Сколько лет без биндинга писали).
А здесь работать не будет.
Eld HaspПросто по какой-то неведомой мной причине большинство "студенческих" WF приложений пишется без разделения данных и их отображения.
Значит не успевают по расчасовке).
Скажу по секрету, что иногда и MV*** оверхед и не нужен.
Удачи!
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814865
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>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
Взаимодействие UserControl в рамках приложения
    #39814873
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев<Зачем она в данном случае?
Этого вполне достаточно - txb_ГруппыПФ.Text = (xuc as uc_Группы).str_ГруппаПФ;
Я инженер и плодить лишнее - не мой стиль.ВМоисеев>4) Вы не знаете что такое компоновка WPF элементов…
<Использую Visual Studio, это её работа.С таким подходом не надо вообще брать WPF - это лишнее. WinForms вполне достаточно и проще. А взяв WPF ты нарушаешь свой собственный совет:ВМоисеевне увлекайтесь подгонкой под модноевот именно это ты сейчас и делаешь, взял модный фреймворк, разбираться как он работает не хочешь.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814874
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев>Я инженер и плодить лишнее - не мой стиль.
Как инженер инженеру.

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

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

В каких-то микро применениях, так ещё получится сделать. Но даже маленькое приложение уже вряд ли.
Как и с микроскопом - забить один-два гвоздя получится. А вот сколотить полочку уже вряд ли.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814882
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
из всех местных преподов ни один не дал ссылку хоть на одну свою прогу (исключение - бешеный меринос)
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814883
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosиз всех местных преподов ни один не дал ссылку хоть на одну свою прогу (исключение - бешеный меринос)а где твоя на WPF?
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814884
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>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
25 сообщений из 99, страница 1 из 4
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Взаимодействие UserControl в рамках приложения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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