powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Взаимодействие UserControl в рамках приложения
99 сообщений из 99, показаны все 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
Взаимодействие UserControl в рамках приложения
    #39814885
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев>Eld Hasp, вчера, 19:55 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21887597][21887597]
>P.S. Мой совет Вам - тормозните чуток и изучите основы. Без этого будет очень трудно создавать WPF приложения.
<А это мой Вам совет - смотрите в корень задачи и не увлекайтесь подгонкой под модное. Лишнее надо нещадно удалять.
Не зная в целом что Вы реализуете, сделал очень простой пример для иллюстрации.

Для WPF практически всегда нужны реализации интерфейсов Icommand и INotifyPropertyChanged
Использую такую реализацию - INotifyPropertyChanged
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    /// <summary>Базовый класс с реализацией INPC </summary>
    public abstract class OnPropertyChangedClass : INotifyPropertyChanged
    {
        /// <summary>Событие для извещения об изменения свойства</summary>
        public event PropertyChangedEventHandler PropertyChanged;
        /// <summary>Метод для вызова события извещения об изменении свойства</summary>
        /// <param name="propertyName">Изменившееся свойство</param>
        public void OnPropertyChanged([CallerMemberName]string propertyName = "") =>
                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }


И такую реализацию - Icommand
Код: 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.
    #region Делегаты для методов WPF команд
    public delegate void ExecuteHandler(object parameter);
    public delegate bool CanExecuteHandler(object parameter);
    #endregion

    #region Класс команд - RelayCommand
    /// <summary>Класс реализующий интерфейс ICommand для создания WPF команд</summary>
    public class RelayCommand : ICommand
    {
        private readonly CanExecuteHandler _canExecute;
        private readonly ExecuteHandler _onExecute;
        private readonly EventHandler _requerySuggested;

        /// <summary>Событие извещающее об измении состояния команды</summary>
        public event EventHandler CanExecuteChanged;

        /// <summary>Конструктор команды</summary>
        /// <param name="execute">Выполняемый метод команды</param>
        /// <param name="canExecute">Метод разрешающий выполнение команды</param>
        public RelayCommand(ExecuteHandler execute, CanExecuteHandler canExecute = null)
        {
            _onExecute = execute;
            _canExecute = canExecute;

            _requerySuggested = (o, e) => Invalidate();
            CommandManager.RequerySuggested += _requerySuggested;
        }

        public void Invalidate()
            => Application.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                CanExecuteChanged?.Invoke(this, EventArgs.Empty);
            }), null);

        /// <summary>Вызов разрешающего метода команды</summary>
        /// <param name="parameter">Параметр команды</param>
        /// <returns>True - если выполнение команды разрешено</returns>
        public bool CanExecute(object parameter) => _canExecute == null ? true : _canExecute.Invoke(parameter);

        /// <summary>Вызов выполняющего метода команды</summary>
        /// <param name="parameter">Параметр команды</param>
        public void Execute(object parameter) => _onExecute?.Invoke(parameter);
    }
    #endregion



Для соединения с UC объявляю интерфейс и его реализацию
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
namespace WPF1903
{
    public interface IFilterWarehouse 
    {
        string Value { get;  set; }
        RelayCommand Command { get; }
    }
    public class FilterWarehouse : OnPropertyChangedClass, IFilterWarehouse
    {
        private string _value;

        public string Value { get => _value; set { _value = value; OnPropertyChanged(); } }
        public RelayCommand Command { get; set; }
    }
}


Сам UC
Код: 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.
35.
<UserControl x:Class="WPF1903.Warehouse"
             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:local="clr-namespace:WPF1903"
             mc:Ignorable="d" Width="287" Height="90"
             DataContext="{x:Type local:IFilterWarehouse}">
    <Grid Background="#FFA7B2B1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition />
        </Grid.RowDefinitions>
        <TextBlock Grid.Column="1" Grid.ColumnSpan="2"  
                   HorizontalAlignment="Center" VerticalAlignment="Center" 
                   Background="Yellow" Text="Параметры фильтра группы" 
                   Padding="5"/>
        <TextBlock Grid.Column="1" Grid.Row="1" 
                   HorizontalAlignment="Center" VerticalAlignment="Center" 
                   Text="Назв. группы" Margin="5"/>
        <TextBox Grid.Column="2" Grid.Row="1"
                 Margin="5"  TextWrapping="Wrap" 
                 Text="{Binding Value}" VerticalAlignment="Center" />
        <Button  Margin="5" ToolTip="Подстановка" 
                 Command="{Binding Command}" 
                 CommandParameter="{Binding Value}" >
            <Image Source="Resources/Стрелка Влево.png"/>
        </Button>
    </Grid>
</UserControl>



ViewModel
Код: 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.
    public class WarehouseVM : OnPropertyChangedClass
    {
        /// <summary>Оригинальный список</summary>
        public IEnumerable<string> OriginalList => new string[]
          {
            "Первый",
            "Второй",
            "Третий",
            "Четвёртый",
            "Пятый",
            "Шестой"
          };
        /// <summary>Отфильтрованный список</summary>
        public IEnumerable<string> FilteredList { get; private set; }
        /// <summary>Экземпляр фильтра</summary>
        public FilterWarehouse Filter { get; } = new FilterWarehouse();

        /// <summary>Безпараметрический конструктор</summary>
        public WarehouseVM()
        {
            Filter.Command = new RelayCommand(FilterMetod);
            FilterMetod(null);
        }
        /// <summary>Метод фильтрации</summary>
        /// <param name="parameter">Значение фильтра</param>
        private void FilterMetod(object parameter)
        {
            string value = parameter?.ToString();
            if (string.IsNullOrWhiteSpace(value))
                FilteredList = OriginalList;
            else
                FilteredList = OriginalList.Where(item => item.Contains(value));
            OnPropertyChanged(nameof(FilteredList));
        }
    }


И само окно
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
    <Window.DataContext>
        <local:WarehouseVM/>
    </Window.DataContext>
    <StackPanel>
        <ListBox ItemsSource="{Binding OriginalList}"/>
        <ListBox ItemsSource="{Binding FilteredList}"/>
        <local:Warehouse DataContext="{Binding Filter}"/>
    </StackPanel>



Из этого примера видно, что при правильной реализации WPF решения, задачи передачи данных от одной View другой (от панели к панели, от UC к окну и т.п.) даже не возникает. Все элементы View только ОТОБРАЖАЮТ данные, а хранятся они уже на уровне VM или Model и там же обрабатываются.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814886
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ViPRosиз всех местных преподов ни один не дал ссылку хоть на одну свою прогу (исключение - бешеный меринос)а где твоя на WPF?
в игрушки не играю :) некогда
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814888
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld Hasp,

не, так не пойдет
это принудительное изменение
а Моисей берет когда хочет
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814890
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ViPRosEld Hasp,

не, так не пойдет
это принудительное изменение
а Моисей берет когда хочетНе понял о чем Вы.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814892
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosв игрушки не играю :) некогда
ну понятно. Не играю, не предлагаю, не анализирую.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814893
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевСударь, Вы хоть вдумайтесь, что за ахинею несёте - здесь же не митингВместо 100 страниц обсуждения (твоего кода) попробуй пример штатный в WPF что показывают.
На моей памяти ты ни разу не пробовал примеры из доков и от своих товарищей.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814921
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Eld Hasp, сегодня, 16:20 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21887876][21887876]
>Не зная в целом что Вы реализуете…
<Вообще-то в целом реализую информационную систему в формате двухзвенки на базе WPF.
Конкретный пример показывает реализацию взаимодействия панели А, работы с таблицей <Группы>, и панели Б ввода строкового фрагмента фильтра.
Панель А есть UserControl для работы с таблицей <Группы> (см. слайд). Пользователь, используя панель Б, уточняет запрос на построение выборки из таблицы. К примеру, если введет <Х>, то в списке грида панели А останется <Хранилище>.
Итак панель А:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
namespace ns_Хранилище {
  public partial class uc_Группы : UserControl, I_Плитка  {
    Guid pk_Guid;
    ObservableCollection<row_Entity> oc_Entity=new ObservableCollection<row_Entity>();  //-- Показываем в DataGrid 
    List<row_Entity> lst_Entity; //-- Временное хранение выборки
    public row_Entity xrow;
    int iRow;
    string caption_Entity = "Работа с таблицей групп";
    IMainWindow при;  //-- интерфейс MainWindow
    I_Плитка зак ;       //-- интерфейс заказчика
    Object xuc;            //-- ссылка на UserConrtol заказчика  
    public bool bl_Разрешение = false;

    //-- Параметры фильтра 
    //---------------------
    public string str_ГруппаПФ = " ";   //-- хранение текущего значения фрагмента строки фильтра
    . . . 


вызывая панель Б работы с фильтром, применяя интерфейс MainWindow
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
    . . .
    //-- Фильтр
    //--------------------------------------------------------
    private void btc_Фильтр_Click(object sender, RoutedEventArgs e) {
      if (!bl_Разрешение) return; //-- Запрет обработки нажатия
      bl_Разрешение = false;
      при.uc_ДобавитьФ("uc_Группы_Фильтр", (Object)this);
    }
    . . .


пользователь загружает панель Б (её не было в момент выполнения команды при.uc_ДобавитьФ("uc_Группы_Фильтр", (Object)this);)
это
по завершению ввода фрагмента фильтра выполняется это - private void btc_Выбор_Click… и панель Б ликвидируется.
Обработка выбора в панели А:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    . . .
    //-- Подстановка
    //--------------------------------------------------------
    public void uc_Подстановка(string name, Object obj) {
      if (name == "uc_Группы_Фильтр")      {
        str_ГруппаПФ = (obj as uc_Группы_Фильтр).txb_ГруппыПФ.Text;
        bl_Разрешение = true;
        ЗапросДанных();
      }
    }
    . . .


Я не в восторге от Вашего кода и думаю, что ещё более разительно будет отличаться коды всего приложения или хотя бы коды панели А.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814922
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев>Eld Hasp, сегодня, 16:20 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21887876][21887876]
>Не зная в целом что Вы реализуете…
<Вообще-то в целом реализую информационную систему в формате двухзвенки на базе WPF.
Конкретный пример показывает реализацию взаимодействия панели А, работы с таблицей <Группы>, и панели Б ввода строкового фрагмента фильтра.
Панель А есть UserControl для работы с таблицей <Группы> (см. слайд). Пользователь, используя панель Б, уточняет запрос на построение выборки из таблицы. К примеру, если введет <Х>, то в списке грида панели А останется <Хранилище>.

Я не в восторге от Вашего кода и думаю, что ещё более разительно будет отличаться коды всего приложения или хотя бы коды панели А.
Я интересуюсь за Ваше приложение в целом. Вы же пишите за то какие используете инструменты для реализации.

Дело Ваше, конечно.
Но то как Вы подходите к реализации, какие используете инструменты для этого - это не типичный для WPF подход.
Ваш подход очень сильно затрудняет создание приложения в целом, так как типовые решения в WPF основаны на совершенно ином подходе к реализации.

Кроме проблем с самой реализацией в Вашем подходе, возникают проблемы и с информацией. Так как так ни кто не делает, некому Вам и подсказать как же это можно реализовать. Всю информацию Вам приходится добывать и раскапывать самостоятельно.

Я понимаю, что мой код Вам не понятен или не нравится, но это не изменяет того факта, что он сделан в типичном для WPF решения подходе. И там где с Вашим подходом придётся провозится неделю и с неизвестным результатом, в типов можно сделать за несколько часов. И даже если что-то не получается, то есть к кому обратиться за помощью. Так как таким образом делают все. Для всех такие решения прозрачны, читаемы и понятны. В них проще разобраться, найти ошибки и поправить.

И это не просто какой-то "заговор" программистов - это официальный подход разработчика Net и WPF - фирмы MicroSoft. WPF специально "затачивается" и оптимизируется под MVVM паттерн. Он и разработан по сути именно для реализации этого паттерна.

Ещё раз говорю - дело Ваше. Но то как Вы делаете, это трудно, долго, нетипично. Вы значительно, в десятки раз, сами себе затрудняете создание приложений.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814955
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Что я и говорил.
Вы никогда не примите "не ваш код".
Продоожайте хоть 100 страниц, если будут желающие.
Удачи.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39814996
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Eld Hasp, вчера, 23:51 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21887964][21887964]
>...это не типичный для WPF подход…
<Согласен, видимо действительно так.
При моём подходе инфосистема реализуется множеством приложений. Каждое приложение есть <MainWindow, множество UserVontrol (рабочие панели), класс глобальные переменные>. Я хочу, чтобы пользователь имел на рабочем столе только тот инструмент, что необходим в данный момент по сути решаемой задачи. Если он работает с информацией Хранилища приложений, то использует только приложение Хранилище, остальные не загружаются. Если занимается с информацией по сотрудникам, то применяет приложение - Сотрудники и т.п. Допустим использует в данный момент работает с панелью <Приложения> приложения <Хранилище>.
Пример на слайде.
Сканируя список сущностей <Приложения> в гриде, находит, что надо поменять поле <Группа> в конкретной сущности. Инструмента (панель Группа) работы с сущностью <Группа> на рабочем столе пока нет. Двойной клик на поле Группа выбранной строки грида активизирует загрузку панели Группа. Она занимает рабочую зону стола (MainWindow), панель Приложения становиться неактивной - сдвигается в зону ожидания рабочего стола, функциональные кнопки удаляются, чтобы не мозолили глаза. Пользователь переключается на работу с панелью Группы. По завершению работы панели Группы, если осуществлён выбор нужной группы, осуществляется подстановка в поле Группа выбранной строки панели Приложения.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39815007
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевЕсли он работает с информацией Хранилища приложений, то использует только приложение Хранилище, остальные не загружаются.это никак не мешает использовать MVVM. Никто не требует же делать одну GOD-модель на все приложение.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39815008
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев>Eld Hasp, вчера, 23:51 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21887964][21887964]
>...это не типичный для WPF подход…
<Согласен, видимо действительно так.
При моём подходе инфосистема реализуется множеством приложений. Каждое приложение есть <MainWindow, множество UserVontrol (рабочие панели), класс глобальные переменные>. Я хочу, чтобы пользователь имел на рабочем столе только тот инструмент, что необходим в данный момент по сути решаемой задачи.....
Как Вы подходите к реализации я примерно понял.
Для Вас основа приложения это интерфейс взаимодействия с пользователем.

Так создавали приложения раньше - лет 30 назад. Я тогда работал и помню первые интерфейсы ещё когда даже Norton Commander не было. Помню как их программировали, как создавали интерфейсы для выносных дисплеев, работали в них с БД,

Да, это всё было, но было это 30 лет назад! Тогда не было практически ни каких инструментов (ПО) для реализации всего этого и приходилось всё делать кастомно. Этот подход во многом сохранился сейчас и в сообществе WinForms программирования. В основном, потому что там очень большое количество "старых" программистов которые закостенели и не осваивают новые инструменты. А "молодёжь" смотрит на "стариков" и думает, что такое программирование и есть правильное. Это не так.

WPF же ушёл уже намного дальше. Он создавался когда уже было множество различных других инструментов для создания пользовательских интерфейсов. И к тому времени уже были опробованы множество решений и паттернов облегчающих создание приложений. MicroSoft решила, что MVVM - это самый удобный из них для приложений в её ОС. И поэтому, именно с учётом реализации в этом паттерне, и разработала WPF.

Но особенностью MVVM является создание приложения начиная с Модели, то есть части приложения отвечающего за обработку данных. Этот подход значительно противоречит знаниям "старых" программистов, поэтому редко кто из них научился полноценно использовать WPF. Даже те кто использую, то (за редким и исключением) используют полностью отбрасывая весь слой WPF созданный для взаимодействия с данными. То есть фактически превращая WPF в WinForms - только используя "модное" название.

Ещё раз пишу. Такое программирование ОЧЕНЬ сильно затрудняет создание приложений. ОЧЕНЬ - это в десятки раз!
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39815012
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каждый пост Eld Hasp в этом топике можно прям на стену вешать!
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39815023
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProКаждый пост Eld Hasp в этом топике можно прям на стену вешать!

А самого вместо люстры
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39815026
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld HaspСкорее всего, это связанно, с отсутствием в WF привязок. И, соответственно, для реализации полноценного MVVM надо кастомно в View реализовывать прослушку всех свойств ViewModel. Это сложно для подавляющего большинства преподавателей. И, соответственно, они не учат этому студентов.
Но в WF довольно просто использовать MVC паттерн. В нём уже функция обновления View возложена на контролер.
Книге Брайана Нойеса "Привязка данных в Windows Forms", изданной на русском, уже 10 лет.
Ничего сложного там нет и про MVP рассказано.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39815028
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий МухEld HaspСкорее всего, это связанно, с отсутствием в WF привязок. И, соответственно, для реализации полноценного MVVM надо кастомно в View реализовывать прослушку всех свойств ViewModel. Это сложно для подавляющего большинства преподавателей. И, соответственно, они не учат этому студентов.
Но в WF довольно просто использовать MVC паттерн. В нём уже функция обновления View возложена на контролер.
Книге Брайана Нойеса "Привязка данных в Windows Forms", изданной на русском, уже 10 лет.
Ничего сложного там нет и про MVP рассказано.Сложного нет! Согласен!
Но костность "стариков" не позволяет это освоить.
Если же сравнивать с WPF, то в WinForms сделать правильно всё же намного сложнее. Но лучше и проще чем делать неправильно.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39815031
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld HaspДмитрий Мухпропущено...

Книге Брайана Нойеса "Привязка данных в Windows Forms", изданной на русском, уже 10 лет.
Ничего сложного там нет и про MVP рассказано.Сложного нет! Согласен!
Но костность "стариков" не позволяет это освоить.
Если же сравнивать с WPF, то в WinForms сделать правильно всё же намного сложнее. Но лучше и проще чем делать неправильно.
Старики старикам - рознь :)

MVC, MVP, MVVM ведь "старики" и придумали.

The MVC pattern was originally conceived in 1978-79 by Trygve Reenskaug and had the primary goal of providing an interface for users to manipulate multiple views of data as if working with real world entities.

Взято отсюда: Interactive Application Architecture Patterns .

Просто многим банально лень изучать что-либо.
Хотя в институте вроде объясняли, что лучшие практики, подходы и технологии всегда на чём-то основаны :)
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39815034
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld HaspЕсли же сравнивать с WPF, то в WinForms сделать правильно всё же намного сложнее.
Так ведь интереснее пробовать приложить различные архитектурные подходы там, где за тебя это не сделали.
Писать свои компоненты, а не использовать сторонние.

И вот одни "старики" в своё время это сделали. И теперь результатами их труда пользуется множество разработчиков.
А другие "старики" как говнокодили, так и продолжают.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39815035
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Eld Hasp, сегодня, 15:12 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21888203][21888203]
>...то есть части приложения отвечающего за обработку данных…
<Что Вы понимаете под обработкой данных? У меня сущности хранятся либо в списках, либо ObservableCollection. Что нужно с ними делать?
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39815043
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий МухСтарики старикам - рознь :)

Просто многим банально лень изучать что-либо.
Хотя в институте вроде объясняли, что лучшие практики, подходы и технологии всегда на чём-то основаны :)
Так и есть. Я писал о подавляющем большинстве.
Сам я тоже "старик" - если 30 лет назад уже работал программистом...

Дмитрий МухEld HaspЕсли же сравнивать с WPF, то в WinForms сделать правильно всё же намного сложнее.
Так ведь интереснее пробовать приложить различные архитектурные подходы там, где за тебя это не сделали.
Писать свои компоненты, а не использовать сторонние.

И вот одни "старики" в своё время это сделали. И теперь результатами их труда пользуется множество разработчиков.
А другие "старики" как говнокодили, так и продолжают.Осознанно пробовать и придумывать новое - это одно.
А "тормозить" из-за костности на старом - это другое.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39815048
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld HaspДмитрий Мухпропущено...

Так ведь интереснее пробовать приложить различные архитектурные подходы там, где за тебя это не сделали.
Писать свои компоненты, а не использовать сторонние.

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


Первое - это любознательность. Второе - это лень, прокрастинация, невежество.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39815049
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев>Eld Hasp, сегодня, 15:12 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21888203][21888203]
>...то есть части приложения отвечающего за обработку данных…
<Что Вы понимаете под обработкой данных? У меня сущности хранятся либо в списках, либо ObservableCollection. Что нужно с ними делать?Я не знаю, что, конкретно, с ними можно сейчас сделать.
Для этого надо знать целиком Ваше приложение, так как оно, очень вероятно, изначально спроектировано неверно.
А ошибки проектирования косметическими мерами не исправишь.

Если есть желание научиться правильному созданию WPF приложения и есть время на это, то можно учиться на Вашем.
Но его, скорее всего, придётся переделывать полностью.
И начинать надо будет с этапа проектирования.

Будет желание - пишите. Чем смогу помогу.

В данном же случае, надо хотя бы целиком знать Вашу View. Чтобы понимать где что с чем стыкуется, где какие данные.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39815051
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld HaspВ данном же случае, надо хотя бы целиком знать Вашу View. Чтобы понимать где что с чем стыкуется, где какие данные.Oh no! :)
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39815086
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Eld Hasp, сегодня, 17:04 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21888262][21888262]
>Я не знаю, что, конкретно, с ними можно сейчас сделать.
<Я не точно сформулировал мысль - что делать с моими данными я знаю, но что Вы подразумеваете под обработкой ваших данных.
И потом, ObservableCollection показываю в гриде так:
Код: c#
1.
2.
3.
4.
5.
      . . .
      if (lst_Entity != null) {
        oc_Entity = new ObservableCollection<row_Entity>(lst_Entity); lst_Entity = null;
        dgv_Entity.ItemsSource = oc_Entity;
     . . .



если это Вам что-то говорит, а то расчирикались насчет привязок.
И так использую:
Код: c#
1.
2.
3.
4.
5.
6.
namespace ns_ИнспекцииВД {
  public class cls_СотрудникД : INotifyPropertyChanged {
    private string _str_МестоРож;
    private string _str_СемПол;
    private string _str_Обр;
  . . .



и сущности во всех панелях имеют одинаковые имена, и списки тоже. Хотя Вам об этом рановато.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816091
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух
MVC, MVP, MVVM ведь "старики" и придумали.


Из всех аббревиатур можно смело выкинуть первую букву, она там для красоты
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816332
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Eld Hasp, 17 май 19, 19:55 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21887597][21887597]
>1) Вы используете для вывода простого текста Label.
<Последовал Вашему совету - заменил на пробу в одной панели Label на TextBlock. Подскажите как в TextBlock размещать текстовый контент по вертикали и горизонтали, а то бирки как-то не очень хорошо рисуются
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816382
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Ты не стесняйся. Не бери его только label.
Время есть, весь его пример изучи.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816454
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев<Последовал Вашему совету - заменил на пробу в одной панели Label на TextBlock. Подскажите как в TextBlock размещать текстовый контент по вертикали и горизонтали, а то бирки как-то не очень хорошо рисуются
Честно говоря как-то надобности не былою
На вскидку, в голову приходит два варианта
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    <StackPanel Height="169" VerticalAlignment="Bottom">
        <StackPanel.Resources>
            <sys:String x:Key="Digits">1234567890</sys:String>
        </StackPanel.Resources>
        <TextBlock Text="{StaticResource Digits}" RenderTransformOrigin="0,1">
            <TextBlock.RenderTransform>
                <TransformGroup>
                    <ScaleTransform/>
                    <SkewTransform/>
                    <RotateTransform Angle="90"/>
                    <TranslateTransform/>
                </TransformGroup>
            </TextBlock.RenderTransform>
        </TextBlock>
    </StackPanel>



Код: xml
1.
2.
3.
4.
5.
6.
    <StackPanel Height="169" VerticalAlignment="Bottom">
        <StackPanel.Resources>
            <sys:String x:Key="Digits">1234567890</sys:String>
        </StackPanel.Resources>
        <ItemsControl ItemsSource="{StaticResource Digits}"/>
    </StackPanel>
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816471
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Eld Hasp, сегодня, 13:39 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21890701][21890701]
>...На вскидку, в голову приходит два варианта ...
<Спасибо.
Но остаюсь при своем:
label.VerticaContentAlignment = VerticaAlignment.Center;
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816472
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот ещё пример - поворот до размещения
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    <StackPanel Orientation="Horizontal">
        <StackPanel.Resources>
            <sys:String x:Key="Digits">1234567890</sys:String>
        </StackPanel.Resources>
        <TextBlock Text="{StaticResource Digits}">
            <TextBlock.LayoutTransform>
                    <RotateTransform Angle="90"/>
            </TextBlock.LayoutTransform>
        </TextBlock>
    </StackPanel>
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816476
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев>Eld Hasp, сегодня, 13:39 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21890701][21890701]
>...На вскидку, в голову приходит два варианта ...
<Спасибо.
Но остаюсь при своем:
label.VerticaContentAlignment = VerticaAlignment.Center;
Так я не понял Вам повёрнутый текст нужен или его центрирование по вертикали и горизонтали в контейнере?
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
    <Grid>
        <Grid.Resources>
            <sys:String x:Key="Digits">1234567890</sys:String>
        </Grid.Resources>
        <TextBlock Text="{StaticResource Digits}"
                   VerticalAlignment="Center"
                   TextAlignment="Center"/>
    </Grid>
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816505
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Eld Hasp, сегодня, 13:55 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21890735][21890735]
>Так я не понял Вам повёрнутый текст нужен или его центрирование по вертикали и горизонтали в контейнере?
<Я использую выравнивание контента так:
1.label.VerticalContentAlignment = {VerticaContentAlignment.Center;VerticalContentAlignment.Тор;...} или или VerticalContentAlignment={"Center","Top",...}
2.label.HorizontalContenAlignment = {HorizontalContentAlignment.Center;HorizontalContentAlignment.Тор;...} или HorizontalAlignment={"Center","Top",...}
повернутый текст пока не применял
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816515
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев>Eld Hasp, сегодня, 13:55 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21890735][21890735]
>Так я не понял Вам повёрнутый текст нужен или его центрирование по вертикали и горизонтали в контейнере?
<Я использую выравнивание контента так:
1.label.VerticalContentAlignment = {VerticaContentAlignment.Center;VerticalContentAlignment.Тор;...} или или VerticalContentAlignment={"Center","Top",...}
2.label.HorizontalContenAlignment = {HorizontalContentAlignment.Center;HorizontalContentAlignment.Тор;...} или HorizontalAlignment={"Center","Top",...}
повернутый текст пока не применял
Я в начале подумал, что вам текст надо выводить, то по горизонтали, то по вертикали.

А обычное выравнивание я показа в предыдущем посте.
Если в CB то так
Код: c#
1.
2.
3.
            textBlock.VerticalAlignment = VerticalAlignment.Center;
            textBlock.HorizontalAlignment = HorizontalAlignment.Center;
            textBlock.TextAlignment = TextAlignment.Center;
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816550
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Eld Hasp, сегодня, 14:34 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21890801][21890801]
>...Если в CB то так...
< Повторяю, контент выравниваю так:
label.VerticalContentAlignment = VerticalContentAlignment.Center;

а так сделать нельзя:
textBlock.VerticalContentAlignment = VerticalContentAlignment.Center;
или
textBlock.HorizontalContentAlignment = HorizontalContentAlignment.Left;
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816661
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеева так сделать нельзя:
textBlock.VerticalContentAlignment = VerticalContentAlignment.Center;
или
textBlock.HorizontalContentAlignment = HorizontalContentAlignment.Left;
Нет.
Это свойства класса Control. Его наследник ContentControl? а от него Label, ButtonBase и др.
А TextBlock ycktletn напрямую от FrameworkElement.

Мне трудно, Вам конкретно подсказать, не зная Вашей цели. Кроме того, я UI элементы? вообще, в принципе не создаю в коде - только в XAML. Возможно некоторые вещи к коде проще сделать по другому.

В XAML - 90% делается автоматически дизайнером-конструктором, сразу видны результаты работы, легко корректировать, исправлять.
В коде, в принципе, знаю как всё это повторить, но это муторно. На одну строчку XAML? которая создаётся в два-три клика и десяток введённых символов, в C# требуется пол листа вслепую написать.

Что касается данного случая. То, по моим догадкам, Вам нужен элемент для вывода текста. С центральным выравниванием по вертикали и левым по горизонтали во включающем контейнере.
Если фон элемента не нужен, то так будет выводить TextBlock с такими свойствами
Код: c#
1.
            textBlock.VerticalAlignment = VerticalAlignment.Center;

По умолчанию горизонтальное выравнивание в TextBox для элемента для HorizontalAlignment = Stretch и для TextAlignment = Left. Поэтому их задавать не надо.

Если же нужен фон в размер контейнера и вертикальное центрирование на этом фоне, то фон надо устанавливать у контейнера, а не TextBlock
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816670
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для вывода не форматированного текста можно использовать TextBox в режиме только для чтения.
Он тоже наследник Control->TextBoxBase->TextBox. И у него есть свойств для выравнивания содержимого.
Так как Вы использовали Label? то вряд ли Вы выводили форматированный текст, так что TextBox должен Вам подойти.
Код: c#
1.
2.
3.
4.
5.
            TextBox textBox = new TextBox()
            {
                VerticalContentAlignment = VerticalAlignment.Center,
                IsReadOnly = true
            };
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816672
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TextBlock это по сути примитив, хоть он и является элементом управления и сам состоит из других элементов. Его обычно использую в шаблонах элементов управления (ControlTemplate, DataTemplate), как примитивный элемент отображения.

А в макетировании\верстке элементов управления (Window, UserControl, DataTemplate) Label вполне уместен и предоставляет возможности переключения фокуса на связанный элемент управления с помощью горячих клавиш. Так как шаблоном по умолчанию для ContentPresenter'ов это TextBlock, содержимое будет всё равно в TextBlock'е. в Label можно будет добавить картинку или другие "фишички".
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816752
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Eld Hasp, сегодня, 17:09 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21891024][21891024]
>...Так как Вы использовали Label?...
<Так:
<Label Grid.Column="1" Grid.Row="0" x:Name="lbl_Заголовок" HorizontalAlignment="Center" VerticalAlignment="Center" Height="26" Width="117" Background="Yellow" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Visibility="Visible" Content="Сотрудники" />
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816813
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев>Eld Hasp, сегодня, 17:09 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21891024][21891024]
>...Так как Вы использовали Label?...
<Так:
<Label Grid.Column="1" Grid.Row="0" x:Name="lbl_Заголовок" HorizontalAlignment="Center" VerticalAlignment="Center" Height="26" Width="117" Background="Yellow" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Visibility="Visible" Content="Сотрудники" />Из этого определения, на мой взгляд, избыточно Grid.Row="0" и Visibility="Visible" это и так значения по умолчанию. Зачем их явно прописывать.
И имя элемента. Я имена использую только если они нужны для привязок внутри XAML. И то, чаще всего, дефолтное название создаваемое дизайнер-конструктором XAML.
Все эти центрирования и явное задание размеров можно заменить на Padding

Посмотрите такое определение. По-моему, визуально тоже самое, но короче
Код: xml
1.
2.
3.
4.
        <TextBlock Grid.Column="1" 
               HorizontalAlignment="Center" VerticalAlignment="Center"
               Background="Yellow"  Padding="20,5"
               Text="Сотрудники"/>
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816822
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Eld Hasp, сегодня, 22:46 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21891331][21891331]
>...Посмотрите такое определение. По-моему, визуально тоже самое, но короче...
<Сделал так:
Код: xml
1.
    <TextBlock Grid.Column="1"  HorizontalAlignment="Center" VerticalAlignment="Center"  Background="Yellow"  Padding="20,5"  Text="Сотрудники" Width="188" />


имею:
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816827
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев>Eld Hasp, сегодня, 22:46 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21891331][21891331]
>...Посмотрите такое определение. По-моему, визуально тоже самое, но короче...
<Сделал так:
Код: xml
1.
    <TextBlock Grid.Column="1"  HorizontalAlignment="Center" VerticalAlignment="Center"  Background="Yellow"  Padding="20,5"  Text="Сотрудники" Width="188" />


имею: Width="188" забыли убрать.
И, по-моему, можно убрать VerticalAlignment="Center" , но это зависит от установки строки Grid. Если там Auto, то можно убирать.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816843
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Eld Hasp, вчера, 23:45 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21891365][21891365]
>Width="188" забыли убрать.
<Да нет, я изменяю размер желтого поля, а текст должен находится там, где мне надо (к примеру, по центру желтого поля или слева)
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39816926
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев>Eld Hasp, вчера, 23:45 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21891365][21891365]
>Width="188" забыли убрать.
<Да нет, я изменяю размер желтого поля, а текст должен находится там, где мне надо (к примеру, по центру желтого поля или слева)Позвольте задать вопрос, а для чего Вы изменяете (при чём явно) размер этого поля?
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39817117
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Eld Hasp, сегодня, 10:30 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21891582][21891582]
>Позвольте задать вопрос…
<Я рассматриваю желтое поле и текст как шильдик, наклеенный на прибор. UserControl не совсем окно, как то надо показать что оно есть. Не знаю, как ещё объяснить.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39817173
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
По дизайну это Г.
Хош верь, хош не верь.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39817262
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 15:04 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21892095][21892095]
>По дизайну это Г. …
<На вкус на цвет. Но и шедевром своё творение не считаю. Дизайн не мой конёк. Функционально этот инструмент делает то что надо.
По сути дизайна - на правой панели нет шильдика и (для меня) как то не так.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39817265
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Ну а зачем тут на форуме учить людей плохому дизайну?
Удачи.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39817277
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев>Eld Hasp, сегодня, 10:30 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21891582][21891582]
>Позвольте задать вопрос…
<Я рассматриваю желтое поле и текст как шильдик, наклеенный на прибор. UserControl не совсем окно, как то надо показать что оно есть. Не знаю, как ещё объяснить.Я не за это.
Пусть шильдик. Дело Ваше.
Но зачем явно задавать размер?
Уберите Width="188" и посмотрите результат.
Вообще, в WPF явное задание размеров используется очень редко.
И VerticalAlignment="Center" тоже уберите - он, в данном случае, тоже не нужен.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39817286
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld Hasp,
+1 это как верстка html. Кругом наследование стилей и очень очень редкое перекрытие или абсолютные значения.
Максимум параметров по умолчанию.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39817302
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Eld Hasp,
+1 это как верстка html. Кругом наследование стилей и очень очень редкое перекрытие или абсолютные значения.
Максимум параметров по умолчанию.Ну, как я понял, WPF и создавался с учётом опыта работы с HTML.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39817343
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По дизайну я как в 90е вернулся =)))
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39817361
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Eld Hasp, сегодня, 17:04 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21892308][21892308]
>Но зачем явно задавать размер?
Уберите Width="188" и посмотрите результат.
Вообще, в WPF явное задание размеров используется очень редко.
<Убрал.
Мне хотелось бы иметь более или менее одинаковый размер шильдика. Вы же предлагаете заменить Width на Padding, т.е. явное заменяете на неявное + нудная подгонка размера поля под контент. Тем не менее Вашим советом воспользуюсь. Спасибо.
Код: xml
1.
2.
<TextBlock Grid.Column="1"  HorizontalAlignment="Center" Background="Yellow"  Padding="20,5"  Text="Сотрудники" />
<!--<Label  Grid.Column="1" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" Height="26" Width="127" Background="Yellow" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="Сотрудники"/>-->
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39817370
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеевМне хотелось бы иметь более или менее одинаковый размер шильдика. Вы же предлагаете заменить Width на Padding, т.е. явное заменяете на неявное + нудная подгонка размера поля под контент. Тем не менее Вашим советом воспользуюсь. Спасибо.

Поймите, если делать, то делать. А вот это фраза "хотелось бы иметь более или менее одинаковый размер" звучит, ну, как-то очень не по программистски.

Если Вам нужно сделать одинаков, и, именно, так Вам нужно по дизайну, то и делайте одинаково.
Объявите в VM или в View ресурсах, соответствующую, переменную и стиль и привяжите все шильдики (по инглиш Label, наверное?) к этой переменной и стилю. Тогда всё будет комильфо.
В этом стиле и Label ляжет красиво.

Вот пример. Объявляете обычно в словаре и потом подключаете к ресурсом на уровне выше всех ваших окон где это используется
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
        <sys:Double x:Key="MainLabel.MinWidth">190</sys:Double>
        <Style TargetType="Label" x:Key="MainLabel.Style">
            <Setter Property="HorizontalAlignment" Value="Center"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="Background" Value="Yellow"/>
            <Setter Property="MinWidth" Value="{DynamicResource MainLabel.Width}"/>
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate DataType="{x:Type sys:String}">
                        <TextBlock Text="{Binding Mode=OneTime}" Margin="5" 
                                 HorizontalAlignment="Center" 
                                 VerticalAlignment="Center"
                                 TextAlignment="Center"/>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>



А по месту в окне просто прописываете
Код: xml
1.
        <Label Style="{StaticResource MainLabel.Style}">Сотрудники</Label>



Тогда все "шильдики" будут одинаковые по оформлению, в том числе по ширине (если текст помещается).
И оформление их всех будет в одном месте. А не раскидано по всем окнам.

И если у Вас в целом дизайн окна однотипный, то не только "шильдики" надо поместить в стиль, а весь дизайн целиком.
Ну, представьте себе, что это подпрограмма. Вызываете подпрограмму (стиль) и она создаёт Вам общий дизайн.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39817377
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Eld Hasp, сегодня, 21:31 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21892513][21892513]
>...И если у Вас в целом дизайн окна однотипный, …
<Есть стремление к этому - дизайн панелей в принципе однотипный.
Пока сделал "болванку". Копируешь и переименовываешь 2 файла и далее правишь нужное ручками. На сегодня имею 2 типа панелей - панели с дата гридом для отображения выборки и панели с Label, TextBox, DatePicker для отображения уточняющих параметров сущности.
За интересную подсказку спасибо.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818096
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>Eld Hasp, сегодня, 21:31 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21892513][21892513]
>...И если у Вас в целом дизайн окна однотипный, …
<Есть стремление к этому - дизайн панелей в принципе однотипный.
Пока сделал "болванку". Копируешь и переименовываешь 2 файла и далее правишь нужное ручками. На сегодня имею 2 типа панелей - панели с дата гридом для отображения выборки и панели с Label, TextBox, DatePicker для отображения уточняющих параметров сущности.
За интересную подсказку спасибо.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818128
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
Разбираем дизайн а-ля 90ые.
"Панели" это у тебя аналог форм или окон винды?
Тогда как премещать, закрывать, сворачивать, обзывать, распахивать, мигать, выравнивать и прогрессбарить в панели задач?
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818129
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos, упс... Вопрос автору)
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818163
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 10:18 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21893656][21893656]
>"Панели" это у тебя аналог форм или окон винды?
<"Панель" есть UserControl WPF. Точка. Содержит "внутри себя" данные, команды и способ отображения.
Располагаются на MainWindow. Некий аналог SPA (одностраничное приложение).
Работу в рамках а-ля SPA сложно описать на пальцах. Легче привести код. Используется следующий интерфейс:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  interface IMainWindow  {
    void tmrStart();                                               //-- запуск таймера   
    void tmrStop();                                                //-- останов таймера   
    UserControl get_Стек();                                   //-- показ панели вершины стека(UserControl) 
    void uc_Добавить(string ucName, Object obj);   //-- добавить новую панель (UserControl) 
    void uc_ДобавитьФ(string ucName, Object obj); //-- добавить новую панель (UserControl) фильтра 
    void uc_Удалить();                                           //-- удаление панели (UserControl) 
    void uc_Заменить(string ucName, Object obj);   //-- замена панели (UserControl) 
    UserControl uc_КтоЗагрузил();                         //-- получение панели-загрузчика
    int i_КтоЗагрузил();                                         //-- получение панели-загрузчика
    int uc_тмУровень(out int u);                             //-- получение уровня панели-загрузчика  
    void uc_ЗапросДанных();                                //-- вызов панельного метода данных  
  }


к примеру, новая панель добавляется так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    //-- Добавим и покажем новый UserControl
    public void uc_ДобавитьФ(string Name, Object obj) { bl_Фильтр = true; uc_Добавить(Name, obj); }
    public void uc_Добавить(string Name, Object obj) {
      if (Name == null) return;
      ucName = Name;
      oUC = obj;
      //-- Деактивируем верхнюю панель 
      UserControl uc = get_Стек();
      if (uc != null) uc.IsEnabled = false;
      //-- Покажем новую панель
      Загрузить();
      ShowControls();
      uc_ЗапросДанных(); //-- Запрос данных
    }


удаляется так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    //-- Удалим последний и покажем предпоследний UserControl
    public void uc_Удалить() {
      UserControl uc=pop_Стек();
      if (uc != null) grd_Главная.Children.Remove(uc);
      if ((uc = get_Стек()) != null) {
        uc.VerticalAlignment = VerticalAlignment.Bottom;
        uc.HorizontalAlignment = HorizontalAlignment.Right;
        uc.Margin = new Thickness(0, 0, 5, 5);
        uc.IsEnabled = true;
        ((I_Плитка)uc).uc_cmdVisibility(Visibility.Visible);
      }
      else btc_Visibility(Visibility.Visible);
      ucNew = null;
    }


Как будет раскрашена панель - дело дизайнера.
Меня интересовал способ обмена данными между панелями.
Не помню, кто ещё делал подобный интерфейс в 90-е. Для WinForm несколько большая возня с панелями при загрузке и удалении.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818175
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Вроде простой вопрос от не программиста задал.
Вверху на скрине Панель имени ВМоисеева (так буду называть) это для НЕ ПРОГРАММИСТА окно винды?
..
Если не понял, то потом возьму скрин и обведу красным.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818176
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевНекий аналог SPAтсссс. В десктопе разделах такое не говори.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818192
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 13:51 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21893768][21893768]
>Если не понял, то потом возьму скрин и обведу красным.
<Не понял и скрина нет. Это имел ввиду?
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818193
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Раньше.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818200
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Retro123, сегодня, 15:27 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21893821][21893821]
>Раньше.
<В холодно-горячо решил поиграть?
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818205
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
А как ты с пользователями разговариваешь?
Они спросят - а вот это окошко (скрин) которое вы назвали панелью, как закрыть-свернуть?
А ты ему что?
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818213
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 15:44 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21893837][21893837]
>А ты ему что?
>У активной панели (с какой работаешь в данный момент) есть две кнопки: выход и подстановка+выход. Обе удаляют панель и делают активной предыдущую.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818225
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Он тебе скажет по телефону - не вижу кнопку!!!
Пакажи на скрине. Я тоже не вижу.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818238
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 16:45 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21893876][21893876]
>...Пакажи на скрине. Я тоже не вижу…
<См. например здесь , здесь и здесь
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818246
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Красня стрелка? Ужассссссс.
А крестик в левом верхнем углу не догадался?
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818258
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 19:43 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21893924][21893924]
>...А крестик в левом верхнем углу не догадался?
<Все функциональные кнопки собраны в одном столбце грида. Так удобнее.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818266
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Вот поэтому тебе сложно в дизайне. Ты просто не видишь очевидного.
- я спросил, почему не в ВЕРХНЕМ ЛЕВОМ углу.
- ты ответил что все собраны а одном столбце.
Неужели ты не понял, что можно делать в одном столбце, НО ВВЕРХУ?
Удачи тебе)
О дизайне бесполезно.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818291
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 21:43 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21893953][21893953]
>...О дизайне бесполезно.
<Видимо да, но обрати внимание на это . Да и крестик не отражает суть - стрелка есть переход к вызывающей панели
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818301
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевстрелка есть переход к вызывающей панелиКруто))
А когда закрываем окно, то мы "закрываем" или "переходим к вызывающей")) LOL
У тебя особый мир. Все закрывают, а у тебя - "переход".
У тебя кнопки наверно тоже - вместо ОК\Cancel - Перейти\Остаться)
...
Ладно, заканчиваем. Неинтересно. Делай свои "панели".
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818328
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 00:54 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312511&msg=21893997][21893997]
>...Ладно, заканчиваем. Неинтересно. Делай свои "панели"...
<Да, с тобой надо заканчивать. Полезной информации от тебя ноль.
Но на всякий случай, не для тебя, есть задача работы со списком Персоны (таблица Персоны). Из окна вызываем инструмент Персоны (UserControl uc_Персоны). Персонами могут быть пришлые или сотрудники.
1. Если пришлые, то общую информацию (для таблицы Персоны) задаем в строке грида, детальную (для таблицы ПерсоныД) в панели ПерсоныД (UserConrtol uc_ПерсоныД)
2. Если сотрудники, то вызываем панель ПерсоныД, клик на желтом Сотрудник для вызова панели Сотрудники. Сотрудник может иметься в таблице Сотрудники, а может и нет. Если позволяют права Пользователя, можно ввести нового сотрудника или посмотреть информацию о нем - общую в гриде, детальную в отдельной панели. После выбора сотрудника информация по сотруднику прописывается и панели ПерсоныД и в соответствующей строке грида панели Персоны.
3. Когда пользователь нажимает функциональную кнопку завершения работы с панелью, он не завершает работу в целом - текущая панель удаляется из зоны активности, её место занимает панель, что вызвала удаляемую.
...
Рейтинг: 0 / 0
Взаимодействие UserControl в рамках приложения
    #39818336
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев<Да, с тобой надо заканчивать. Полезной информации от тебя ноль.
Но на всякий случай,....
Но навсякий случай я за углом)))
Так обычно говорят технари-кодеры которые никогда не вырастут)... до постановщиков задач.
Будь справедливым, тебе же не только я про дизайн сказал).
Постановка задачи - Г. и дизайн - Г.
А исполнение задачи:
Выкладывай дальше свой код и жди ответов.
...
Рейтинг: 0 / 0
99 сообщений из 99, показаны все 4 страниц
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Взаимодействие UserControl в рамках приложения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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