Как вы берете ввод TextBox и возвращаете его в TextBlock - PullRequest
0 голосов
/ 03 июля 2018

Я новичок в MVVM и пытаюсь ввести строку в текстовое поле, и она возвращается в текстовом блоке на другой странице.

В моей папке Views у меня есть код в xaml, который представляет собой текстовое поле, в которое я хочу ввести:

<TextBox x:Name="date" Text="{Binding Date}" Grid.Row="0" TextAlignment="Right" TextWrapping="Wrap" Margin="0 10 0 1" Padding="1" />

Это другая страница wpf с текстовым блоком, и я хочу, чтобы то, что было напечатано в текстовом поле, появилось здесь:

<TextBlock Grid.Row="0" TextAlignment="Right" TextWrapping="Wrap" Margin="0 0 0 2" Padding="1" Text="{Binding Date}" />

В моей папке Model у меня есть класс Data Entry, который выглядит следующим образом:

public class DataEntry
    {
        public string Date { get; set; }


    }

В моей папке ViewModels у меня есть:

namespace FumeHood1._0._0.ViewModels
{
    public class MainViewModel : INotifyPropertyChanged
    {
        public DataEntry DataEntry { get; set; }
        private string date;

        public string Date
        {
            get { return date; }
            set
            {
                date = value;
                OnPropertyChanged(nameof(Date));
            }
        }




        public event PropertyChangedEventHandler PropertyChanged;




        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }


}

Я искал везде и не могу найти правильный способ сделать это. Если бы кто-то мог помочь, это было бы удивительно. Просто пытаюсь заставить этот шаблон MVVM работать и иметь больше смысла для меня.

1 Ответ

0 голосов
/ 03 июля 2018

Сначала установите DataContext вашего взгляда.

public partial class MainWindow : Window 
{
     public MainWindow() {
         InitializeComponent();
         DataContext = new MainViewModel();
     }
}

Или в xaml: (НЕ оба одновременно)

<Window>
    <Window.DataContext>
        <vm:MainViewModel/>
    </Window.DataContext>
</Window>

И убедитесь, что один и тот же экземпляр MainViewModel используется на обеих страницах.

Во-вторых, тщательно сконфигурируйте ваши привязки так, чтобы они действовали как задумано:

<TextBox Text="{Binding Date, UpdateSourceTrigger=PropertyChanged, Mode=OneWayToSource}"/>
<TextBlock Text="{Binding Date}" />

Обратите внимание, что UpdateSourceTrigger=PropertyChanged обеспечивает обновление свойства модели представления при вводе пользователем. Mode=OneWayToSource только обновляет свойство модели представления из свойства TextBox Text, но не наоборот.

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