WPF系列——简单绑定学习

1. 绑定到元素对象.(实际项目中用处不大)

界面上两个关联的控件之间绑定,比如一个TextBlock 的FontSize和一个Slider 的Value绑定:

<Slider Name="sliderFontText" Minimum="1" Maximum="100" Value="10"/>
        <TextBox Name="txtValue" Width="200"
                 Text="{Binding  ElementName=sliderFontText, Path=Value,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"/>

Text的内容就是new了一个Binding对象,设置ElementName,Path等是绑定的属性值.

XAML对应的C#代码:

Binding binding = new Binding();
binding.ElementName = "sliderFontText";
binding.Path = new PropertyPath("Value");
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
binding.Mode = BindingMode.TwoWay;
txtValue.SetBinding(TextBox.TextProperty, binding);

删除绑定:

BindingOperations.ClearBinding(txtValue, TextBox.TextProperty);

绑定后属性的操作,如删除绑定,获取控件绑定对象,都可以使用System.Windows.Data.BindingOperations的静态方法.

BandingModel枚举值介绍:


名称


说明


OneWay


源属性 -> 目标属性(源变化引发目标变化)


TwoWay


源属性 <-> 目标属性(源变化引发目标变化且目标变化也引发源变化)

OneTime
首次执行 源属性 -> 目标属性,后面所有变化忽略(除非显示调用BindingExpress.UpdateTarget()或者重新绑定完全不同的对象


OneWayToSource


和OneTime绑定方式相反

Default
依赖绑定目标属性

UpdateSourceTrigger枚举值介绍:


名称


说明


PropertyChanged


目标属性变化 -> 立即更新源


LostFocus


目标属性变化 + 目标失去焦点 -> 更新源


Explicit


调用BindingExpression.UpdateSource() -> 更新源


Default


大部分为PropertyChanged,Textbox.Text是LostFocus

2. 绑定非界面元素

1.    绑定静态类的静态属性(系统预定义和自定义方法一致,这里演示一个自定义):

XAML(c是 命名空间WPFDemo的别名):

<Button Content="{Binding Source={x:Static c:MyRes.Name}}"/>

C#:

namespace WPFDemo
{
    public static class MyStaticRes
    {
        public static string Name { get { return "返回的Name"; } }
    }

}

2.绑定一般类的一般属性

XAML:首先需要新建一个资源对象,

创建资源对象:

<Window.Resources>
    <c:MyRes x:Key="customRes" Name="自定义资源文本"></c:MyRes>
</Window.Resources>

XAML绑定:

<Button Content="{Binding Source={StaticResource customRes},Path=Name}"/>

C#:

namespace WPFDemo
{
    public class MyRes
    {
        public string Name { get; set; }
    }
}

3. 相对绑定

XAML(这里将StackPanel的Name绑定到Button的Content属性中):

<StackPanel x:Name="LayoutRoot">
        <Button
            Content="{Binding Path=Name, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type StackPanel}}}"/>
    </StackPanel>

RelativeSource 的Model枚举值值:

名称 说明
Self 绑定自己的另外一个属性
FindAncestor 绑定到父元素,需要设置父元素类型AncestorType和父元素层次AncestorLevel(默认为1)
PreviousData 绑定到数据绑定列表的前一项
TemplateParent 绑定到应用模板的元素

4.DataContext绑定

<Button Content="{Binding Path=Name}" DataContext="{Binding Source={StaticResource myRes}}"/>

或者

<StackPanel Name="MainLayout" DataContext="{Binding Source={StaticResource myRes}}">
        <Button Content="{Binding Path=Name}" />
    </StackPanel>

Binding中属性介绍


属性


含义


ElementName


是指绑定的源元素(这里一般指界面元素)


Path


源元素的绑定关联属性


UpdateSourceTrigger


更新绑定属性的时机


Model


更新绑定的方式

Source 提供数据的引用
RelativeSource 使用一个RelativeSource对象指向源对象,主要是相对数据源绑定使用
DataContext 最重要的绑定,没有Source或者RelativeSource,WPF就按照元素树向上查找DataContext属性,并使用第一个非空的DataContext属性

到这里,基本的Banding就复习完了,这里有一个体会就是,xaml有时候会忘记语法的写法,其实XAML中也是由一个一个的对象组成,组成方式时New一个一个的对象,实例化方式时: {对象类 属性1=XX, 属性2=XX}.

时间: 2024-10-05 05:50:28

WPF系列——简单绑定学习的相关文章

【WPF系列】基础学习-XAML

引言 WPF框架中已经提到,WPF框架提供XAML基本服务.WPF中XAML的引入向开发者提供UI设计和代码分离的编程型.XAML是WPF中提出的一个具有重要意义的新技术,基本涉及WPF中所有UI开发.本设计所有UI代码都采用XAML.   XAML综述 XAML(可扩展应用标记语言的简称,可以称为zammel)是一种被用于.net对象实例的标记语言.尽管XAML是一种可以被应用于不同问题领域的技术,但它最初被设计时是作为WPF的一部分,WPF允许Windows开发人员建设富用户界面.你可以用相

【WPF系列】基础学习-WPF架构

引言 WPF从.net framewok3.0加入以来,经历了很多跟新.每次更新都给用户带来了新的功能或者优化性能.下面我们首先看下WPF再.netFramework中的位置,接着介绍下WPF的架构框架.希望大家能够清楚WPF在.net framework中的位置,便于我们学习WPF时有个定性的认识. .net framework 特性变迁概览   图片来源http://en.wikipedia.org/wiki/.NET_Framework_version_history   WPF在.net

Shiro 系列: 简单示例学习

在本示例中, 使用 INI 文件来定义用户和角色. 首先学习一下 INI 文件的规范. =======================Shiro INI 的基本规范=======================[main]# 在这里定义 SecurityManager 和 Realms 等 [users]# 每一行定义一个用户, 格式是 username = password, role1, role2, ..., roleN [roles]# 角色在这里定义, 格式是 roleName = p

[WPF系列]-DataBinding 绑定计算表达式

        Width="{Binding RelativeSource={RelativeSource Self}, Path=ActualWidth, Converter={StaticResource MathConverter}, ConverterParameter=(@VALUE-100.0)}"   Width="{Binding ElementName=RootWindow, Path=ActualWidth, Converter={StaticResou

[WPF系列]从基础起步学习系列计划

引言 WPF技术已经算不什么新技术,一搜一大把关于WPF基础甚至高级的内容.之前工作中一直使用winform所以一直没有深入学习WPF,这次因项目中使用了WPF技术来实现比较酷的展示界面.我在这里只是把个人学习WPF的过程做些总结,同时也为想我这样的初学WPF的提供一点帮助.我争取做到由浅入深,系统全面.不足之处还请大家指教. 学习工具 俗话说:“工欲行其事,必先利其器”,在学习WPF时我们应该找几个工具提高我们的学习和开发效率. kaxaml 一个实时查看xaml代码和呈现的工具.可从这里下载

WPF中DataGrid的ComboBox的简单绑定方式(绝对简单)

在写次文前先不得不说下网上的其他wpf的DataGrid绑定ComboBox的方式,看了之后真是让人欲仙欲死. 首先告诉你一大堆的模型,一大堆的控件模板,其实或许你紧紧只想知道怎么让combobox怎么显示出来而已. 惯例先上图: 达到这样的效果其实很简单,除了让数据模型之外紧紧只有几行代码. 先看数据模型: public class VModel : INotifyPropertyChanged { private string _Name; public string Name { get

WPF DataGrid、ListView 简单绑定

DataGrid运行效果: xaml 代码: DataGridName= dtgData ItemsSource= {Binding} AutoGenerateColumns= False DataGrid.Columns DataGridTextColumnBinding= {BindingPath=id} Header= ID HeaderStringFormat= id / DataGridTextColumnBinding= {BindingPath=name} Header= 名称 H

WPF系列之二:解耦View层控件事件与ViewModel层事件的响应

以前的做法: 1.当项目的时间比较紧迫的时候,对UI层中控件的事件的处理,往往采取的是类似Winform中最简单的做法,直接做一个事件的Handler直接去调用VM层的方法. 2.控件只有一个Command属性,其它的事件的处理方法没有办法和ViewModel层进行解耦的时候往往也采取上面提到的方法. 如下图所示: 新的做法: 为了实现事件的处理与View层的解耦,我们可以利用WPF提供的附加属性来为需要的事件添加附加行为.附加属性扮演了一个在View层与Model层牵线的角色. 需要下面三个步

WPF系列之三:实现类型安全的INotifyPropertyChanged接口,可以不用“Magic string” 么?

通常实现INotifyPropertyChanged接口很简单,为你的类只实现一个PropertyChanged 的Event就可以了. 例如实现一个简单的ViewModel1类: public class ViewModel1 : INotifyPropertyChanged { private string _data; public string Data { get { return _data; } set { if (_data == value) return; _data = v