我知道这可能是一个新手问题,但同样,我对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" />
答案 0 :(得分:2)
确保将viewmodel设置为控件的DataContext。然后你可以使用像
这样的东西<TextBox Text="{Binding PropertyName, Mode=TwoWay}" Name="txtName" Width="auto" HorizontalAlignment="Left" VerticalAlignment="Bottom" />
将TextBox的Text绑定到viewmodel的PropertyName
答案 1 :(得分:1)
使用绑定(你有单向和双向绑定,在这种情况下你可能正在寻找双向绑定)。
另请查看此处:the msdn tutorial,您可以保留xaml binding cheat sheet:)。
一些基本的例子。我所做的是设置datacontext,在这种情况下我将它设置为MainWindow类(本身),但是您可以轻松地将其设置为您的viewmodel。然后我将MyFoo.MyString
的值绑定到文本框的text属性。
按钮和其他文本字段用于说明双向绑定有效(在这种情况下,它甚至是默认值)。
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中数据绑定的很多信息。