Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Повторно использовать Popup и binding / 7 сообщений из 7, страница 1 из 1
27.08.2018, 18:06
    #39693891
Qwe.Qwe1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать Popup и binding
Есть у меня фрагмент кода с Popup окном, внутри которого Grid с данными, несколько кнопок. Все биндится через ViewModel (данные для списка из модели, команды кнопок обрабатываются в самой ViewModel). Теперь нужно по сути повторить этот код для однотипных списков данных. То есть добавить еще несколько кнопок, по клику на которые будут показываться свои такие же окошки, но с другими данными. Как избежать в моем случае дублирования кода? Вынести в UserControl со своей ViewModel? Или?


Код: 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.
36.
37.
38.
39.
<StackPanel Margin="0,3,10,3">
  <ToggleButton Content="Район..." x:Name="DistrictButton"/>
  <Popup IsOpen="{Binding IsChecked, ElementName=DistrictButton}" StaysOpen="False">
    <Border Style="{StaticResource PopUpBorder}">
      <Grid Width="350" Height="500">
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="Auto"/>
          <ColumnDefinition/>
          <ColumnDefinition Width="75"/>
          <ColumnDefinition Width="75"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
          <RowDefinition/>
          <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <dxg:GridControl Grid.ColumnSpan="4" EnableSmartColumnsGeneration="True" ItemsSource="{Binding FilterModel.Districts}">
          <dxg:GridControl.Columns>
            <dxg:GridColumn Header="Наименование" Width="*">
              <dxg:GridColumn.CellTemplate>
                <DataTemplate>
                  <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Data.IsChecked}" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="3,0,5,0"/>
                    <TextBlock Text="{Binding Data.Name}" HorizontalAlignment="Center"/>
                  </StackPanel>
                </DataTemplate>
              </dxg:GridColumn.CellTemplate>
            </dxg:GridColumn>
          </dxg:GridControl.Columns>
          <dxg:GridControl.View>
            <dxg:TableView/>
          </dxg:GridControl.View>
        </dxg:GridControl>
        <Button Grid.Row="1" Content="Выбрать все" Margin="0,10,0,0" Command="{Binding SelectAllDistrictsCommand}"/>
        <Button Grid.Row="1" Grid.Column="2" Content="ОК" Margin="0,10,0,0" Command="{Binding OKDistrictsCommand}"/>
        <Button Grid.Row="1" Grid.Column="3" Content="Отмена" Margin="5,10,0,0" Command="{Binding CancelDistrictsCommand}"/>
      </Grid>
    </Border>
  </Popup>
</StackPanel>


...
Рейтинг: 0 / 0
27.08.2018, 18:52
    #39693903
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать Popup и binding
Qwe.Qwe1,
Это же отдельное окно форма справочник которое ты можешь вызвать из любого места.
Так?
...
Рейтинг: 0 / 0
27.08.2018, 22:05
    #39694014
Qwe.Qwe1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать Popup и binding
Petro123, в общем - да. Можно создать обычное окно со своей VM и при клике на кнопку создавать его, передавая список значений и т.п. Надо только убрать строку заголовка и научиться выводить его сверху/снизу кнопки как это автоматом делает попап.
А хотелось бы, если это просто, сделать именно Popup и средствами XAML (шаблоны и т.п.) добиться нужно результата. Понять как это делается.
...
Рейтинг: 0 / 0
27.08.2018, 23:17
    #39694037
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать Popup и binding
Popup по сути, это примитив. То есть использовать его стоит в качестве части шаблона элемента управления, а не как независимый элемент управления. В шаблона обычно всё биндится через TemplateBinding, а содержимое передается через DataTemplate'ы.
...
Рейтинг: 0 / 0
28.08.2018, 06:00
    #39694072
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать Popup и binding
Недавно была тема, в которой как раз был вариант решения, как раз на основе с Popup и ToggleButton, и как раз в виде шаблона контрола (комбобокса) с привязками данных через TemplateBinding: 21635815
...
Рейтинг: 0 / 0
28.08.2018, 06:05
    #39694075
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать Popup и binding
P.S. Советую обратить внимание, как в примере по ссылке содержимое Popup завернуто в SystemDropShadowChrome. У Джоша Смита есть небольшая заметка про использование этого класса.
...
Рейтинг: 0 / 0
28.08.2018, 07:23
    #39694083
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать Popup и binding
Roman MejtesPopup по сути, это примитив. То есть использовать его стоит в качестве части шаблона элемента управления, а не как независимый элемент управления. В шаблона обычно всё биндится через TemplateBinding, а содержимое передается через DataTemplate'ы.а с гридом внутри это не тяжеловесно?
У грида обычно размер окна побольше папап комбобокса.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Повторно использовать Popup и binding / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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