Как создать метод для сохранения пользовательского ввода - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть следующее представление, где пользователь может ввести три различных элемента: LockedOutBy , LockedOutFor и LockedOutDate . У меня возникают проблемы при создании метода в моей модели представления, который позволяет пользователю вводить эти три элемента, и как только они нажимают « ok », он сохраняет эти три элемента. Извините, если он расплывчатый или недостаточно информации, пожалуйста, дайте мне знать, если что-то еще нужно.

Спасибо.

Просмотр

<TextBlock VerticalAlignment="Center" Margin="5,5" Grid.Column="0" Grid.Row="1" Text="Locked Out By:"/>
                        <TextBox Grid.Column="1" Grid.Row="1" Text="{Binding LockedOutBy, UpdateSourceTrigger=PropertyChanged}"/>

<TextBlock VerticalAlignment="Center" Margin="5,5" Grid.Column="0" Grid.Row="2" Text="Locked Out For:"/>
                        <TextBox Grid.Column="1" Grid.Row="2" Text="{Binding LockedOutFor, UpdateSourceTrigger=PropertyChanged}"/>

<TextBlock VerticalAlignment="Center" Margin="5,5" Grid.Column="0" Grid.Row="3" Text="Locked Out Date:"/>
                        <TextBox Grid.Column="1" Grid.Row="3" Text="{Binding LockedOutDate, UpdateSourceTrigger=PropertyChanged}"/>

<Button Command="{Binding Path=OKCommand}"

enter image description here

Просмотр-модель

Это то, что у меня есть в моей модели.

private string _LockedOutFor;
        public string LockedOutFor
        {
            get { return _LockedOutFor; }
            set
            {
                _LockedOutFor = value;
                OnPropertyChanged("OwnerName");
            }
        }

        private string _LockedOutBy;
        public string LockedOutBy
        {
            get { return _LockedOutBy; }
            set
            {
                _LockedOutBy = value;
                OnPropertyChanged("Street");
            }
        }

        private int _LockedOutDate;
        public int LockedOutDate
        {
            get { return _LockedOutDate; }
            set
            {
                _LockedOutDate = value;
                OnPropertyChanged("StreetOverflow");
            }
        }

public ICommand CancelCommand
        {
            get { return new RelayCommand(c => OnCancelLock()); }
        }

        public ICommand OKCommand
        {
            get { return new RelayCommand(c => OnOKLock()); }
        }

        protected void OnOKLock()
        {
            OnOK(LockedOutFor, LockedOutBy, LockedOutDate);
        }

        protected void OnCancelLock()
        {
            OnCancel();
        }

1 Ответ

0 голосов
/ 17 февраля 2020

ANotifyPropertyChanged - базовая реализация для всех наших моделей представлений

using System.ComponentModel;
using System.Runtime.CompilerServices;

namespace SO60269403
{
    public abstract class ANotifyPropertyChanged : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void SetProperty<T>(ref T backingStore, T newValue, [CallerMemberName] string propertyName = "")
        {
            var areEqual = ReferenceEquals(backingStore, newValue);
            if (areEqual)
                return;
            backingStore = newValue;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

LockedOutViewModel - наша модель представления

namespace SO60269403
{
    public class LockedOutViewModel : ANotifyPropertyChanged
    {
        private string lockedOutBy;
        private string lockedOutFor;
        private int lockedOutDate;

        public string LockedOutBy { get => lockedOutBy; set => SetProperty(ref lockedOutBy, value); }
        public string LockedOutFor { get => lockedOutFor; set => SetProperty(ref lockedOutFor, value); }
        public int LockedOutDate { get => lockedOutDate; set => SetProperty(ref lockedOutDate, value); }
    }
}

ACommand - базовая реализация для всех наших команд

using System;
using System.Windows.Input;

namespace SO60269403
{
    public abstract class ACommand : ICommand
    {
        public event EventHandler CanExecuteChanged;

        public virtual bool CanExecute(object parameter) => true;

        public abstract void Execute(object parameter);
    }
}

SaveCommand - наша команда сохранения

namespace SO60269403
{
    public class SaveCommand : ACommand
    {
        public LockedOutViewModel LockedOutViewModel { get; set; }

        public override void Execute(object parameter)
        {
            //TODO
        }
    }
}

MainWindow - представление для привязки данных к нашей модели представления и подключения нашей команды сохранения

<Window
    x:Class="SO60269403.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:SO60269403">
    <Window.Resources>
        <local:LockedOutViewModel
            x:Key="LockedOutViewModel" />
    </Window.Resources>
    <Grid
        DataContext="{StaticResource LockedOutViewModel}">
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <TextBlock
            Grid.Row="0"
            Grid.Column="0">Locked Out By</TextBlock>
        <TextBlock
            Grid.Row="1"
            Grid.Column="0">Locked Out For</TextBlock>
        <TextBlock
            Grid.Row="2"
            Grid.Column="0">Locked Out Date</TextBlock>
        <TextBox
            Grid.Row="0"
            Grid.Column="1"
            Text="{Binding LockedOutBy}" />
        <TextBox
            Grid.Row="1"
            Grid.Column="1"
            Text="{Binding LockedOutFor}" />
        <TextBox
            Grid.Row="2"
            Grid.Column="1"
            Text="{Binding LockedOutDate}" />
        <StackPanel
            Grid.Row="3"
            Grid.Column="0"
            Grid.ColumnSpan="2"
            Orientation="Horizontal"
            HorizontalAlignment="Right">
            <StackPanel.Resources>
                <Style
                    TargetType="Button">
                    <Setter
                        Property="Width"
                        Value="100" />
                </Style>
            </StackPanel.Resources>
            <Button>Cancel</Button>
            <Button>
                <Button.Command>
                    <local:SaveCommand
                        LockedOutViewModel="{StaticResource LockedOutViewModel}" />
                </Button.Command>
                OK
            </Button>
        </StackPanel>
    </Grid>
</Window>

, если мы поместим точку останова в Затем SaveCommand.Execute запускает приложение, вводит некоторые значения и нажимает кнопку «ОК», отладчик должен прерывать нашу точку останова, и мы можем наблюдать, что свойства модели представления совпадают с тем, что мы ввели. это показывает, что данные готовы к сохранению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...