WPF绑定
一、背景
晚上吃过饭,就溜达,恰好就看到大神同事正在新建一个WPF项目。就跟他聊个天,我说我对WPF也算了解,也能依葫芦画瓢往里搞控件搞数据,我觉得我最不会的地方是新建一个项目后,要数据绑定,绑定最开始是怎么形成的,怎么定义的,Xaml怎么找到这个类的?
大神同事呵呵一笑。这你都不会?于是开始给我直播创建新的项目。
由于我是菜鸟,每当这个时候就网上搜,或者找以前的项目依葫芦画瓢,虽说都能解决问题满足需求,但总没有系统的学习过,总之很狼狈。于是看大神操作了一波,除绑定外,还学习了公共控件ContentControl的使用。怕以后用到的时候忘记了,写这篇当作记笔记了。
二、环境
本人使用 VS2019 ; .NET Framework 4.7.2
三、过程
1.新建WPF项目。然后界面上分分栏,随便搞点东西。大概就这样
2.关键的一步,添加引用。管理Nuget包,添加这些东西:
3.刚刚添加的Stylet的作用就是把View与ViewModel进行绑定,而绑定的方法,不需要写什么代码,关键之处在于命名。View的命名一定是XXXXView,与之相应的ViewModel一定要是XXXXViewModel。例如我这里把MainWindow重命名位MainView,且要新建一个MainViewModel作为他绑定的类。(建议新建window,改名容易出现各种错误)
添加nuget包时,会出现一个pages文件夹,是一个示例,Xmal中的s引用需要复制到自己的view中。还有一个Bootstarpper类。这个类是决定启动文件的。
4.进行绑定
MainViewModel中继承 Screen类。 Screen是Sytlet中的类,作用就是根据名字找到View并进行绑定。
然后对刚刚建立的TextBox啊,Button啊,绑定试试。代码如下:
public class MainViewModel : Screen
{
public string Word { get; set; }
public string Figure { get; set; }
public void Trans()
{
var fig = int.Parse(Figure);
var w = "";
switch (fig)
{
case 1:
w = "一";
break;
case 2:
w = "二";
break;
case 3:
w = "三";
break;
}
Word = w;
}
}
xaml代码:
<Window x:Class="BindingTest.MainView"
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:BindingTest"
xmlns:s="https://github.com/canton7/Stylet"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="3*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<Label Content="数字:" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBox Text="{Binding Figure}" Width="50" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Label Content="文字:" Margin="50 0 0 0" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBox Text="{Binding Word}" Width="50" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Button Content="测试" Command="{s:Action Trans}" Margin="80 0 0 0" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Grid.Row="2">
<Label Content="Hello World!" VerticalAlignment="Center" FontSize="40"/>
</StackPanel>
</Grid>
</Window>
5.进行测试
输入数字2,点击测试按钮。出现了“二”。 测试成功
6.结语
先写这些。要下班了。
中间那部分留着下次写contentCortol再用。
本人菜鸟,可能有写的不对或者遗漏的地方。有什么问题欢迎交流。