WPF简单教程:数据绑定

有人不喜欢WPF人为WPF是一种落后的技术,毕竟WPF已经是一种拥有十多年历史的古老技术了。
但是,我觉得WPF技术并不老,在他所处的那个时代,WPF无疑是一种十分超前的技术。直到现在,WPF与他的后继者UWP依然算是一种先进的界面类库。

WPF的数据绑定

WPF是一种数据驱动的界面技术,不同于传统的以控件为核心的界面类库,WPF以数据呈现为中心。我的理解:WPF界面操作的核心并不是控件的操作,而是对于数据的操作。WPF的核心基础是数据绑定,当界面呈现于独立于界面的数据绑定在一起之后,我们只需要操作后台数据,前端界面上的信息就会随之更新。
很多界面类库中都有类似的设计。例如Java Swing类库中的JListModel,Android中的ViewPager,它们独立出一个模型的概念,模型的数据更新之后,会反应到界面呈现之上。但是他们的设计都不算彻底,WPF中可以绑定任何数据类型就算是复杂的item控件也只需要一个list集合就能搞定。如同WPF这么彻底的在底层重构,完全的支持数据绑定的类库,仅此而已。WPF中的数据绑定已经进入了一种疯魔的地步,任何细节都希望能够利用数据绑定来进行处理。

  • 资源Resource
  • 命令Command
  • 样式Style
  • 元素Element
  • 触发器Tigger
  • 模板template

WPF的数据绑定简直丧心病狂,我只简单的介绍这些比较基础的问题,更详细信息各位可以去看参看书。

资源绑定

任何元素都可以绑定资源,资源是一种可以复用的元素,在不同的元素中共享同一种资源能够有效的降低编程量,提高工作效率。
在window中绑定资源

    <Window.Resources>
        <DataTemplate x:Key="BranchItemTemplate">
            <Grid Height="Auto" Width="Auto" Margin="5">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="202*"/>
                </Grid.ColumnDefinitions>
                <Rectangle Fill="#FFF4F4F5" Stroke="Black" Grid.ColumnSpan="3" RadiusX="8" RadiusY="8" Grid.RowSpan="2"/>
                <TextBlock TextWrapping="Wrap" Text="{Binding Path=BranchName}" Grid.ColumnSpan="3" Margin="10,5"/>
                <TextBlock TextWrapping="Wrap" Text="{Binding Path=ItemID}" Grid.ColumnSpan="3" Margin="10,5" Grid.Row="1"/>
                <TextBlock Grid.Row="2" TextWrapping="Wrap" Text="Static?"/>
                <TextBlock Grid.Row="2" TextWrapping="Wrap" Text="{Binding Path=StaticV}" Grid.Column="1"/>
                <TextBlock Grid.Column="2" Grid.Row="2" TextWrapping="Wrap" Text="{Binding Path=Animation}"/>
            </Grid>
        </DataTemplate>
    </Window.Resources>

上例在window中绑定了一个数据模板,这个模板是应用在listbox中的itemtemplate,当绑定的对象有数据的时候,listbox就会利用此模板格式化每一个条目中的数据,并呈现在listbox的item区域中。使用他的时候只需要在listbox的声明中指明itemtemplate,在初始化代码中关联list对象到listbox的itemsource属性即可。如此即可自动的展示整个list容器中的数据信息了。
此例中datatemplate就是一种资源,一种模板资源,使用的时候需要通过x:key引用。

样式的绑定

样式的绑定一上文类似,可以采用资源声明的方式,将样式声明为一个共享资源,另外样式有一个比较有意思的地方,那就是,如果样式没有提供x:key属性,那么他就是一种默认样式,针对Button声明的默认样式将统一格式化整个界面中的所有样式。当存在多个默认样式的时候,元素的样式会被重复设定,最终的结果是一种混杂,每个属性都保留最后一次的设定值。

命令的绑定

<Window.CommandBinding>
    <CommandBinding Command="CommandClass.StaticCommand" Executeed="ExecuteMethod"></CommandBinding>
</Window.CommandBinding>

命令的绑定同样是任何元素都可以,为了通用型一般选择Window元素。命令绑定的内部原理是“多对一”形式的绑定,这个绑定中命令采用了static属性的方式,非常巧妙的实现了唯一性。在整个系统的运行中,命令的执行操作被委托到了Window类中的私有方法上。

元素的绑定

XX属性="{Binding Element xxxx_Property , Path=ssss}"

……
各种绑定的花样还是很多的,我就不一一介绍了,尤其是绑定套绑定,动态条目的绑定,触发器和动画等等。如果有需要的化,大家可以自行看参考书。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章