powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Окно с полями и кнопками Изменить-Сохранить-Отменить
8 сообщений из 8, страница 1 из 1
Окно с полями и кнопками Изменить-Сохранить-Отменить
    #39252595
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть у меня простая форма на WinForms с полями и кнопками Изменить, Сохранить, Отменить. Теперь ее надо перенести на WPF. Вопрос: как, используя binding и прочие преимущества WPF, сделать тоже самое: пользователь нажал "Изменить", поля стали не ReadOnly, поменял что-либо, далее - либо отменил изменения и все вернулось обратно из модели на форму, или сохранил - все сохранилось в модели (и пошла запись в БД). Считать из БД и записать в нее - тут все ок, а как в WPF по-простому заполнить текстовое поле/комбобокс и прочее и потом отменить все изменения. На WinForms я вручную делал заполнение (МодельНаФорму, ФормуВМодель), но в WPF же вся фишка в биндинге.

Есть класс, объект которого заполняется из MSSQL. В конструкторе окна я делаю привязку данных. В окне есть 2 текстовых поля и комбобокс, к которым я сделал binding в XAML'e.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public class MyModel
{
  public int ID { get; set; }
  public string Address { get; set; }
  public int? Districts { get; set; }
}

this.DataContext = myModel;



XAML:
Код: c#
1.
2.
3.
<TextBox Text="{Binding ID}"/>
<TextBox Text="{Binding Address}"/>
<ComboBox SelectedValue="{Binding Districts}"/>
...
Рейтинг: 0 / 0
Окно с полями и кнопками Изменить-Сохранить-Отменить
    #39252617
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1пользователь нажал "Изменить", поля стали не ReadOnlyгрубый но простой метод - назначить данный стиль элементу-контейнеру, содержащему все редактируемые поля:
Код: xml
1.
2.
3.
4.
5.
6.
7.
          <Style TargetType="FrameworkElement">
            <Style.Triggers>
              <DataTrigger Binding="{Binding EditingMode}" Value="False">
                <Setter Property="IsEnabled" Value="False" />
              </DataTrigger>
            </Style.Triggers>
          </Style>

тогда переключая в ViewModel-и свойство EditingMode вы будете управлять доступностью элементов для редактирования
...
Рейтинг: 0 / 0
Окно с полями и кнопками Изменить-Сохранить-Отменить
    #39252618
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1В конструкторе окна я делаю привязку данных.а зачем? Что мешает прописать все в XAML? ВедьQwe.Qwe1в WPF же вся фишка в биндинге.
...
Рейтинг: 0 / 0
Окно с полями и кнопками Изменить-Сохранить-Отменить
    #39252624
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProQwe.Qwe1В конструкторе окна я делаю привязку данных.а зачем? Что мешает прописать все в XAML? ВедьQwe.Qwe1в WPF же вся фишка в биндинге.хотя, судя по примеру, у вас и прописано все в XAML (кстати, используйте для оформления XAML тэг XML, а не C#).
Тогда не очень понятно, что именно вызвало сложности?

Что касается отмены - я обычно не парюсь и при отмене просто заново загружаю карточку из БД.
...
Рейтинг: 0 / 0
Окно с полями и кнопками Изменить-Сохранить-Отменить
    #39252659
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) По поводу смены ReadOnly: а если надо у только некоторых полей менять состояние, в том числе у кнопок. По умолчанию только "Изменить" доступна, а при ее нажатии - она становится ReadOnly, а 2 другие - наоборот; ну, например, поле с ID менять не надо. К чему этот стиль применить тогда?
2) Как в разметке сделать:
Код: c#
1.
this.DataContext = myModel;


3) Я и комбобокс тоже в коде привязываю. Может это лучше в разметке делать?
Код: c#
1.
2.
3.
4.
5.
6.
// Считали из БД
public static DataTable DTDistricts{ get; private set; }

cmbDocName.ItemsSource = MyClass.DTDistricts.DefaultView;
cmbDocName.DisplayMemberPath = MyClass.DTDistricts.Columns["NAME"].ToString();
cmbDocName.SelectedValuePath = MyClass.DTDistricts.Columns["ID"].ToString();


4) На WinForms я объект модели передавал прямо в форму. Здесь же я указываю "this.DataContext = ...", делаю биндинг. Можно ли потом как-то вызывать методы объекта модели?
...
Рейтинг: 0 / 0
Окно с полями и кнопками Изменить-Сохранить-Отменить
    #39252678
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe11) По поводу смены ReadOnly: а если надо у только некоторых полей менять состояние, в том числе у кнопок. По умолчанию только "Изменить" доступна, а при ее нажатии - она становится ReadOnly, а 2 другие - наоборот; ну, например, поле с ID менять не надо. К чему этот стиль применить тогда?Ну кнопки во-первых должны быть вне контейнера, к которому применяется этот стиль. Или можно назначить кнопкам свой стиль, пусть даже и x:Null. Или создать именованный стиль и применять целевым образом к нужным элементам (в том числе и с использованием BasedOn, если нужно). В общем, идея есть, простор для творчества большой.
...
Рейтинг: 0 / 0
Окно с полями и кнопками Изменить-Сохранить-Отменить
    #39252679
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe12) Как в разметке сделать:
Код: c#
1.
this.DataContext = myModel;

Код: xml
1.
2.
3.
4.
5.
6.
  <Window.Resources>
    <local:myModel x:Key="vm" />
  </Window.Resources>
  <Window.DataContext>
    <Binding Source="{StaticResource vm}" />
  </Window.DataContext>
...
Рейтинг: 0 / 0
Окно с полями и кнопками Изменить-Сохранить-Отменить
    #39252683
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe13) Я и комбобокс тоже в коде привязываю. Может это лучше в разметке делать?а что мешает?
Qwe.Qwe14) На WinForms я объект модели передавал прямо в форму. Здесь же я указываю "this.DataContext = ...", делаю биндинг. Можно ли потом как-то вызывать методы объекта модели?да, это делается через Command
Код: xml
1.
<Button Command="{Binding AddProduct}">
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Окно с полями и кнопками Изменить-Сохранить-Отменить
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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