C# 通过Viewmodel和绑定访问文本框

C# 通过Viewmodel和绑定访问文本框,c#,wpf,class,mvvm,textbox,C#,Wpf,Class,Mvvm,Textbox,我创建了一个C#WPF程序,其中有一个文本框。我希望此文本框使用视图模型提供事件反馈 简化示例:单击按钮时,文本框显示“…单击的按钮” 我目前在代码隐藏中有: public partial class MainWindow : Window { //..... public void FeedbackPanel(string text) { if (FeedbkPanelTextBox != null) { if (

我创建了一个C#WPF程序,其中有一个
文本框
。我希望此
文本框
使用
视图模型
提供事件反馈

简化示例:单击按钮时,
文本框
显示
“…单击的按钮”

我目前在代码隐藏中有:

public partial class MainWindow : Window
{
    //.....
    public void FeedbackPanel(string text)
    {
        if (FeedbkPanelTextBox != null)
        {
            if (text != null)
            {
                FeedbkPanelTextBox.AppendText(text + "\n");
            }
            else
            {
                FeedbkPanelTextBox.AppendText("Null\n");
            }
        }
        else
        {
            return;
        }
    }
}
如何将此代码移到
viewmodel
并在
视图中使用绑定

已编辑的快速示例:

<Window x:Class="ButtonClickedFeedbackICommand.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:ButtonClickedFeedbackICommand"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid.DataContext>
        <local:ViewModel/>
    </Grid.DataContext>
    <StackPanel Orientation="Horizontal">
        <TextBox x:Name="tbFeedback"
                 Text="{Binding ClickedFeedback}"
                 MinWidth="50" 
                 Background="SlateGray"
                 VerticalAlignment="Center"/>
        <Button Content="Click" 
                Command="{Binding TestCommand}"
                CommandParameter="{Binding ElementName=tbFeedback, Path=Text}"
                VerticalAlignment="Center" />
    </StackPanel>
</Grid>
}

和命令:

public class TestCommand : ICommand
{
    public ViewModel _vm { get; set; }

    public TestCommand(ViewModel vm)
    {
        _vm = vm;
    }
    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        _vm.FeedbackPanel(parameter.ToString());
    }
}

您可以选择在该CommandParameter中发送另一个内容。在思考中,流程尊重您的需求。可以随意玩一会儿

你至少应该列出一些你尝试过的事情,这样我们就能了解你的知识水平。因为简单的答案是:“它们是课堂,你可以用它们做各种课堂上的事情。”。但是如果你给我们一份你尝试过的东西的清单,很可能会发现你不理解OO编程的哪一部分。我希望你感觉好些。但这里有一个自我学习的建议。在尝试编程WPF之前,先学习基本的面向对象编程概念。几乎所有的WPF示例或教程都假定您了解OOP的基础知识,但他们不会教您这些基础知识。同时,WPF假设您已经知道了基础知识。在WPF、WinForms或ASP.NET中,这实际上是一个非常简单的问题。答案总是一样的。关于C#编程语言有一本完整的手册。在询问有关该语言语法的基本问题之前,您应该先查看它。看见有关详细参考资料,请参阅。我们宁愿帮助您也不愿回答问题。您提出问题的事实证明您不了解一些基本知识。你说“在自己的课堂上”是什么意思?您是在谈论用户控件,但可能不知道这个术语吗?@Laket如果您使用代码隐藏,确实可以轻松处理按钮的单击事件,但在此之后,您将需要一种方法来调用位于另一个类中的反馈面板(字符串文本)。这还不是全部,你仍然需要一种方法回到你的文本框。您可以在MainWindow中定义方法,该方法将接收字符串参数并使用其名称直接调用TextBox,或者选择绑定到TextBox的Text属性的DepdencProperty,以便与更新保持同步。。总的来说,我建议您开始使用MVVM。
public class TestCommand : ICommand
{
    public ViewModel _vm { get; set; }

    public TestCommand(ViewModel vm)
    {
        _vm = vm;
    }
    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        _vm.FeedbackPanel(parameter.ToString());
    }
}