1

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

<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" />
4

2 回答 2

2

确保将视图模型设置为控件的 DataContext。然后你可以使用类似的东西

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

将 TextBox 的 Text 绑定到视图模型的 PropertyName

于 2012-05-09T13:24:36.600 回答
1

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

也看这里:msdn教程,你可以保留一个xaml绑定备忘单:)。

一些基本的例子。我所做的是设置数据上下文,在这种情况下,我将其设置为 MainWindow 类(本身),但是您可以轻松地将其设置为您的视图模型。然后我将值绑定MyFoo.MyString到文本框的文本属性。

按钮和其他文本字段用于说明两种方式绑定的工作方式(在这种情况下,它甚至是默认设置)。

XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <Grid>
        <TextBox Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" Text="{Binding MyFoo.MyString}" />
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="12,41,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="12,70,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" IsEnabled="False" Text="Init" />
    </Grid>
</Window>

创建一个Foo具有以下定义的类:

public class Foo
{
    public string MyString { get; set; }
}

在你的 MainWindow 代码后面,你有这个:

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 中数据绑定的信息。

于 2012-05-09T12:44:33.350 回答