.net 将控件映射到viewmodel

.net 将控件映射到viewmodel,.net,wpf,mvvm,.net,Wpf,Mvvm,我知道这可能是一个新手问题,但再一次,我是WPF的新手。现在我的大多数文本框、标签、文本块等。。。根据逻辑隐藏在xaml.cs代码后面。我想知道是否有办法将我的控件从xaml文件映射到viewmodel <TextBlock Name="txtBlockName" Text="Name:" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="15,0,0,0" Visibility="Hidden" /> <

我知道这可能是一个新手问题,但再一次,我是WPF的新手。现在我的大多数文本框、标签、文本块等。。。根据逻辑隐藏在xaml.cs代码后面。我想知道是否有办法将我的控件从xaml文件映射到viewmodel

<TextBlock Name="txtBlockName" Text="Name:" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="15,0,0,0" Visibility="Hidden" />
<TextBox Name="txtName"  Width="auto" HorizontalAlignment="Left" VerticalAlignment="Bottom" Visibility="Hidden" />

为此使用绑定(您有单向绑定和双向绑定,在这种情况下,您可能正在寻找双向绑定)

再看看这里:你可以留个:)

一些基本的例子。我所做的是设置datacontext,在本例中,我将其设置为MainWindow类(本身),但是您可以轻松地将其设置为viewmodel。然后我将
MyFoo.MyString
的值绑定到textbox的text属性

按钮和另一个文本字段用于说明双向绑定的工作原理(在本例中,它甚至是默认值)

XAML:

在你的主窗口代码背后,你有:

public partial class MainWindow : Window
{
    public Foo MyFoo { get; set; }

    public MainWindow()
    {
        MyFoo = new Foo() { MyString = "Hello" };

        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        textBox2.Text = MyFoo.MyString;
    }
}

这只是一个又快又脏的例子。我认为您可以解决其余问题,否则:环顾四周,WPF中有大量关于数据绑定的信息。

请确保将viewmodel设置为控件的DataContext。然后你可以用

<TextBox Text="{Binding PropertyName, Mode=TwoWay}" Name="txtName"  Width="auto" HorizontalAlignment="Left" VerticalAlignment="Bottom" />


要将文本框的文本绑定到viewmodel的PropertyName

上,我需要将mode=twoway设置为两者?你能给我举个例子吗?对,我明白你的意思。您提供的是我现在正在使用的,但我想转到MVVM,以摆脱使用“xaml.cs”和使用ViewModel。这有意义吗?所以我再次用Visiblity=“Hidden”修改了代码。。。在我的xaml.cs上,我可以通过设置Visibility=Visibility.visible使它们可见。我只是在兜圈子,因为我在使用MVVM,但同时,使用“xaml.cs”进行隐藏/显示是否是一种良好的做法?如果这不是一个好的实践,那么我如何将其与使用VM结合起来呢?您可以在需要时使用例如数据触发器来显示/隐藏控件。
public partial class MainWindow : Window
{
    public Foo MyFoo { get; set; }

    public MainWindow()
    {
        MyFoo = new Foo() { MyString = "Hello" };

        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        textBox2.Text = MyFoo.MyString;
    }
}
<TextBox Text="{Binding PropertyName, Mode=TwoWay}" Name="txtName"  Width="auto" HorizontalAlignment="Left" VerticalAlignment="Bottom" />