在做WPF项目的时候我们往往需要把前台代码写在后台,这样控制更灵活,减少代码量。下面一个列子展示了后台实现绑定,数据转换Convert,Grid布局后台写法。

    下面直接贴代码

(一)前台代码



<Window x:Class="BindingDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:BindingDemo"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:NaNConvertDash x:Key="nanConvert"/>
</Window.Resources>
<Grid x:Name="grid" Height="60">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"> </ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
</Grid>
</Window>


(二)后台代码



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Controls.Primitives;

namespace BindingDemo
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
string str = string.Empty;
string stringF4 = "{0:F4}";
public MainWindow()
{
InitializeComponent();
UniformGrid gridTitle = new UniformGrid();
gridTitle.Width = 100;
gridTitle.Columns = 1;
TextBox tbxTitleChinese = new TextBox();
tbxTitleChinese.Text = "语文";
gridTitle.Children.Add(tbxTitleChinese);
TextBox tbxTitleEnglish = new TextBox();
tbxTitleEnglish.Text = "英语";
gridTitle.Children.Add(tbxTitleEnglish);
TextBox tbxTitleMath = new TextBox();
tbxTitleMath.Text = "数学";
gridTitle.Children.Add(tbxTitleMath);
gridTitle.SetValue(Grid.RowProperty, 0);
gridTitle.SetValue(Grid.ColumnProperty, 0);
grid.Children.Add(gridTitle);

UniformGrid gridNow = new UniformGrid();
gridNow.Width = 100;
gridNow.Columns = 1;
//语文
TextBox tbxChinese = new TextBox();
Binding bindChinese = new Binding("Chinese");
bindChinese.StringFormat = stringF4;
bindChinese.Converter = FindResource("nanConvert") as IValueConverter;
tbxChinese.SetBinding(TextBox.TextProperty, bindChinese);
gridNow.Children.Add(tbxChinese);
//英语
TextBox tbxEnglish = new TextBox();
Binding bindEnglish = new Binding("English");
bindEnglish.StringFormat = stringF4;
bindEnglish.Converter = FindResource("nanConvert") as IValueConverter;
tbxEnglish.SetBinding(TextBox.TextProperty, bindEnglish);
gridNow.Children.Add(tbxEnglish);
//数学
TextBox tbxMath = new TextBox();
Binding bindMath = new Binding("Math");
bindMath.StringFormat = stringF4;
bindMath.Converter = FindResource("nanConvert") as IValueConverter;
tbxMath.SetBinding(TextBox.TextProperty, bindMath);
gridNow.Children.Add(tbxMath);
gridNow.SetValue(Grid.RowProperty, 0);
gridNow.SetValue(Grid.ColumnProperty, 1);
grid.Children.Add(gridNow);
DataModel data=new DataModel();
data.Chinese = 18f;
data.Math = float.NaN;
data.English = 96.8f;
gridNow.DataContext = data;
}
}
public class DataModel
{
public float Chinese { get; set; }
public float Math { get; set; }
public float English { get; set; }
}
class NaNConvertDash : IValueConverter
{
public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
try
{
float data = (float)value;
if (float.IsNaN(data))
return "-";
else
return data;
}
catch
{
return "-";
}
}
public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new System.NotImplementedException();
}
}
}


(三)代码下载

​代码​