控件操作的反面例子如下:
数据和UI混在一起。i是数据,却和UI操作写成一堆。
Markup
<ListBox x:Name="lbx1"/>
C#
for(int i=0;i<10;i++)
{
lbx1.Items.Add(new ListBoxItem()
{
Content = new TextBlock()
{
Text = i.ToString()
}
});
}
实现数据驱动方式操作控件
C#
<ListBox x:Name="lbx1">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<Border Width="10" Height="10" Background="{Binding colorName}"/>
<TextBlock Margin="10,0" Text="{Binding disName}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
C#
var list1 = new List<MyColor>();
list1.Add(new MyColor() { colorName = "#FF0000", disName = "Red" });
list1.Add(new MyColor() { colorName = "#00FF00", disName = "Green" });
list1.Add(new MyColor() { colorName = "#0000FF", disName = "Blue" });
lbx1.ItemsSource = list1;
数据模板,表格控件的例子
Markup
<Window x:Class="WpfApp1.MainWindow"
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:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid x:Name="grid" AutoGenerateColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Code}"/>
<DataGridTextColumn Binding="{Binding Name}"/>
<DataGridTemplateColumn Header="操作">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<Border Width="10" Height="10" Background="{Binding Code}"/>
<TextBlock Margin="10,0" Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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;
namespace WpfApp1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var list1 = new List<MyColor>();
list1.Add(new MyColor() { Code = "#FF0000", Name = "Red" });
list1.Add(new MyColor() { Code = "#00FF00", Name = "Green" });
list1.Add(new MyColor() { Code = "#0000FF", Name = "Blue" });
grid.ItemsSource = list1;
}
}
public class MyColor
{
public string Code { get; set; }
public string Name { get; set; }
}
}
上面例子如果想提供 添加,删除,复制按钮,只需要改下数据模板即可。
注意数据模板中只允许放一个元素,所以你得用容器放入多个元素。
C#
<DataTemplate>
<StackPanel>
<Border Width="10" Height="10" Background="{Binding Code}"/>
<TextBlock Margin="10,0" Text="{Binding Name}"/>
<Button Content="复制"/>
<Button Content="删除"/>
<Button Content="添加"/>
</StackPanel>
</DataTemplate>
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

本帖最后由 勇哥,很想停止 于 2024-06-09 22:25:08 编辑 
