C#笔记之2(WPF DataBinding Part 1)

这货弄好了可以减少model和view之间映射的代码量,说白了就是后台数据更新自动更新view上的控件内容(一般是listview这类不定子控件数目的控件),所以最好是从刚开始写程序的时候就使用而不是一开始采用人工方法后面再改(会比较头痛)。
这里以DataGrid与数据的binding为例。ListView或者其他的控件可以类推。
出于易读性考虑,这里先给出c#代码然后再解释xaml代码。

// Main.xaml.cs
    public partial class MainWindow : Window
    {

        public List<Item> Items { get; set; }
        public MainWindow()
        {
            InitializeComponent();
            Items = new List<Item>();
            this.DataContext = this;
            items.Add(new Item { IsChecked = false, Id = 1, Name = "PC", Cost = 1000 });
            items.Add(new Item { IsChecked = false, Id = 2, Name = "Phone", Cost = 500 });
        }
    }
// Item.cs
public class Item{
  public bool IsChecked{get;set;}
  public int Id{get;set;}
  public string Name{get;set;}
  public int Cost{get;set}
}

这里稍微解释一下,public int Id{get;set;}相当于

private int _Id;
public int Id{
  get{
    return _Id;}
  set{
    _Id=value;}
}

这先告一段落,下面写出xaml的代码(设置控件大小等视觉效果的属性我就不写了)。

<!-- Main.xaml -->
    <DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding IsChecked}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
            <DataGridTextColumn Header="Cost" Binding="{Binding Cost}"/>
        </DataGrid.Columns>
    </DataGrid>

注意到这里是直接在xaml里面设置的ItemsSource相对应的binding。这会需要一些额外的工作(将Items设置为属性以及设定DataContext: xaml binding对应的变量名编译器会直接在Datacontext下面寻找。)。更简单的在办法是直接在InitializeComponent();后面加上xx.ItemsSource = Items;其中xx是Datagrid的Name属性。

image

弄好以后你会发现可以任意添加,删除Items里的Item同时反映到我们的DataGrid上面去。
但是如果对List做出非添加删除的修改(比如打乱排序)和更改某个元素的属性,则并不能反映在上面。下篇文章我会讲一讲如何做到对List的操作都能造成相应control内容的更改。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,308评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,881评论 0 17
  • Data Binding 学习笔记 在Android系统中使用Java编写逻辑代码,而使用XML表示界面View,...
    蕉下孤客阅读 4,858评论 0 3
  • 好朋友突然告诉我,她分手了。我很震惊,完全现场懵逼了。朋友已经怀孕了,双方也开始聊结婚的事了,很和谐啊。现在说分手...
    舒粒阅读 4,361评论 0 0
  • 明天就是圣诞节啦,于是,在偏僻的郊区住了这么久的四只,我们准备明天进城去感受一下圣诞节的气氛。 虽然临近考试,应该...
    cuckoo酱阅读 1,868评论 0 2

友情链接更多精彩内容