Как назначить / привязать / вставить текст в текстовое поле, используя MVVM, используя событие нажатия кнопки - PullRequest
0 голосов
/ 17 апреля 2020

Я практикую MVVM, я хочу назначить текст в TextBox, используя событие нажатия кнопки. пожалуйста, посмотрите на мой код, я не знаю, что мне не хватает, пробовал это много раз, пробовал смотреть на примеры других людей, я все еще не понимаю, почему текст не отображается на коробке. (Поскольку я новичок, я знаю, что это небольшая вещь, которую я не могу видеть, простите меня за вставку всех длинных кодов, я сделаю это коротким в следующий раз.)

XAML

<Window x:Class="LabelPaste.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:LabelPaste"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button Content="Button" HorizontalAlignment="Left" Margin="329,62,0,0" Command="{Binding MyCommands}" VerticalAlignment="Top" Width="159" Height="55"/>
        <TextBox x:Name="OneBox" HorizontalAlignment="Left" Height="38" Margin="329,169,0,0" TextWrapping="Wrap" Text="{Binding TextCounter, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged }" VerticalAlignment="Top" Width="159"/>

    </Grid>
</Window>

Commads.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace LabelPaste
{
    class Commands : ICommand
    {

            Action<object> executeMethods;
            Func<object, bool> canexecuteMethods;

        public Commands(Action<object> executeMethods, Func<object, bool> canexecuteMethods)
        {
                this.executeMethods = executeMethods;
                this.canexecuteMethods = canexecuteMethods;
        }

            public event EventHandler CanExecuteChanged;



        public bool CanExecute(object parameter)
        {
            return true;
        }



        public void Execute(object parameter)
        {
            executeMethods(parameter);
        }
    }
}

Labelclicked.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;

namespace LabelPaste
{
    class Labelclicked : INotifyPropertyChanged
    {

        private string _textcounter;

        public string TextCounter
        {
            get { return _textcounter; }
            set
            {
                _textcounter = value;
                OnPropertyChanged("TextCounter");
            }
        }


        public string AbilityToCallThis()
        {
            return TextCounter;
        }




        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged(string property)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }

        }
    }
}

ViewModel, которая является View.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace LabelPaste
{
    class View
    {
        public ICommand MyCommands { get; set; }

        public View()
        {
            MyCommands = new Commands(executeMethods, canexecuteMethods);

        }

        private bool canexecuteMethods(object param)
        {
            return true;
        }



        private void executeMethods(object param)
        {
            MessageBox.Show("Test Message" );
            Labelclicked Link = new Labelclicked();
            Link.TextCounter  = "This is My Text to paste into the text Box";

        }


    }
}


Main.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace LabelPaste
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new View();

        }
    }
}

...