WPF数据绑定

一:控件到控件的绑定

1:OneWay
Source影响着Target,但是Target却影响不到Source。
2:OneWayToSource
Target影响Source,而Source却影响不到Target。
3:TwoWay
Source与Target相互影响。
4:OneTime
在OneWay的基础上延伸了一个OneTime,仅绑定一次。如果大家属性Jquery中的one函数我想就可以不用表述了。

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:src="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <Canvas>
        <ScrollBar Height="24" Name="scrollBar1" Width="237" Orientation="Horizontal" Canvas.Left="103" Canvas.Top="51"  Minimum="1" Maximum="100" SmallChange="1" />
        <Label Canvas.Left="41" Canvas.Top="121" Content="OneWay" Height="28" Name="label1" />
        <TextBox Canvas.Left="165" Canvas.Top="121" Height="23"
                 Text="{Binding ElementName=scrollBar1, Path=Value, Mode=OneWay}"
                 Name="textBox1" Width="120" />
        <Label Canvas.Left="41" Canvas.Top="160" Content="OneWayToSource" Height="28" Name="label2" />
        <TextBox Canvas.Left="165" Canvas.Top="160" Height="23"
                   Text="{Binding ElementName=scrollBar1, Path=Value, Mode=OneWayToSource}"
                 Name="textBox2" Width="120" />
        <Label Canvas.Left="41" Canvas.Top="202" Content="TwoWay" Height="28" Name="label3" />
        <TextBox Canvas.Left="165" Canvas.Top="202" Height="23"
                   Text="{Binding ElementName=scrollBar1, Path=Value, Mode=TwoWay}"
                 Name="textBox3" Width="120" />
        <Label Canvas.Left="41" Canvas.Top="231" Content="OneTime" Height="28" Name="label4" />
        <TextBox Canvas.Left="165" Canvas.Top="231" Height="23"
                   Text="{Binding ElementName=scrollBar1, Path=Value, Mode=OneTime}"
                 Name="textBox4" Width="120" />
    </Canvas>
</Window>

二:.net对象与控件的绑定

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:src="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListView  Height="287" HorizontalAlignment="Left" Margin="62,12,0,0" Name="listView1" VerticalAlignment="Top" Width="331">
            <ListView.View>
                <GridView>
                    <GridView.Columns>
                        <GridViewColumn Header="姓名"  DisplayMemberBinding="{Binding Name}"/>
                        <GridViewColumn Header="年龄" DisplayMemberBinding="{Binding Age}"/>
                    </GridView.Columns>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

三:.net方法与控件的绑定( 在做wpf时,有时我们需要在xaml中绑定.net中的方法,当然这在实际开发中也是很常用的,不过方法必要由ObjectDataProvider来封装。)

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ObjectDataProvider x:Key="Test" ObjectType="{x:Type local:Student}" MethodName="GetName">
        </ObjectDataProvider>
    </Window.Resources>
    <Grid>
        <TextBlock Text="{Binding Source={StaticResource ResourceKey=Test}, Mode=OneWay}"/>
    </Grid>
</Window>
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.Shapes;

namespace WpfApplication1
{
    /// <summary>
    /// Window1.xaml 的交互逻辑
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }
    }

    public class Student
    {
        //前台要引用的方法
        public string GetName()
        {
            return "WPF";
        }
    }
}

四:wpf中的验证

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <local:Student x:Key="student"/>
    </Window.Resources>
    <Grid>
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="97,54,0,0" Name="textBlock1" Text="姓名" VerticalAlignment="Top" />
        <TextBox DataContext="{StaticResource ResourceKey=student}" Height="23" HorizontalAlignment="Left" Margin="153,54,0,0" Name="textBox1" VerticalAlignment="Top" Width="120">
            <TextBox.Text>
                <Binding Path="Name" UpdateSourceTrigger="PropertyChanged">
                    <!-- 自定义的验证规格,当然可以是多个Check -->
                    <Binding.ValidationRules>
                        <local:NameCheck />
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
            <TextBox.ToolTip>
                <!--将当前的错误信息显示在tooltip上-->
                <Binding RelativeSource="{RelativeSource Self}"  Path="(Validation.Errors)[0].ErrorContent"/>
            </TextBox.ToolTip>
        </TextBox>
    </Grid>
</Window>
namespace WpfApplication1
{
    /// <summary>
    /// Window1.xaml 的交互逻辑
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }
    }

    public class NameCheck : ValidationRule
    {
        public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
        {
            var name = Convert.ToString(value);
            //如果名字长度大于4则是非法
            if (name.Length > 4)
                return new ValidationResult(false, "名字长度不能大于4个长度!");
            return ValidationResult.ValidResult;
        }
    }

    public class Student
    {
        public string Name { get; set; }

        public int Age { get; set; }
    }
}
时间: 2024-10-27 08:42:11

WPF数据绑定的相关文章

WPF 数据绑定 使用Code First with Database

一.准备工作 1.开发工具 Visual Studio 2013 2.安装Code First with Database 3.创建示例数据库 MyShop USE MyShop GO CREATE TABLE [dbo].[Categories] ( [CategoryId] [INT] NOT NULL IDENTITY , [Name] [NVARCHAR](MAX) , CONSTRAINT [PK_dbo.Categories] PRIMARY KEY ( [CategoryId] )

WPF 数据绑定基础

纯理论,可能会枯燥. .net 技术群: 199281001 ,欢迎加入. 1.目标对象一定是派生自DependencyObject的对象,并且目标属性必须是依赖属性,否则数据绑定操作将会失   败.绑定源对象可以不是依赖对象和依赖属性. 2.定义了依赖属性时,FrameworkPropertyMetadataOptions.NotDataBindable 标志会影响依赖属性的绑定.当改变源对象依赖属性值后,绑定目标可以立即得以更新,开发人员不需要响应事件来手动编写响应代码. 3.移除绑定:开发

WPF——数据绑定(一)什么是数据绑定

注意:本人初学WPF,文中可能有表达或者技术性问题,欢迎指正!谢谢! 一:什么是数据绑定? “Windows Presentation Foundation (WPF) 数据绑定为应用程序提供了一种简单而一致的方法来显示数据以及与数据交互. 元素能够以 公共语言运行时 (CLR) 对象 和 XML 形式绑定到来自各种数据源的数据.“ 这一段的解释来自于MSDN(貌似是机器翻译),我个人理解,数据绑定就是把我们需要操作的两个或多个对象的属性值相互关联的一种方便我们编程的技术. 二:一个绑定关系的四

WPF 10天修炼 第十天- WPF数据绑定

WPF数据绑定 数据绑定到元素属性是将源对象指定为一个WPF元素,并且源属性是一个依赖属性,依赖属性内置了变更通知.当改变源对象依赖属性值之后,绑定目标可以立即得到更新,开发人员不需要手动编写响应事件. 在绑定来源和绑定目标之间,可以使用Mode属性指定绑定的方法.Mode属性是System.Windows.Data.BindMode枚举类型的属性: OneWay:源数据变更目标数据变更,反之不行 OneTime:仅在启动时更新 OneWayToSource:目标数据更新源数据更新,反之不行 T

WPF——数据绑定及属性改变事件

一.首先需要封装一下文本框的属性,并且在实体类中添加一个实体类的属性改变函数 public class User : INotifyPropertyChanged //INotifyPropertyChanged接口是 WPF/Silverlight 开发中非常重要的接口, 它构成了 ViewModel 的基础, 数据绑定基本上都需要这个接口. { private string _Wenben; public string Wenben { get { return _Wenben; } set

wpf 数据绑定2

可以将ItemsControl类控件的依赖项属性ItemsSource作为集合的绑定对象.那么如果集合实现了ObservableCollection<T>这个泛型接口,就能够在集合改变的时候界面也做出响应的改变. ItemsSource = "{Binding}" <--第一种表示方式在父级控件中设置了DataContext属性 !--> ItemsSource = {Binding Source = {StaticResource XXXX}} <--第

wpf 数据绑定1

数据绑定实质上就是把一些任意的.net对象绑定到一起.那么绑定的源头就有1.绑定到目标对象的属性(通常为wpf元素)2.其他任何数据源 数据绑定的关键是System.Windows.Data.Binding类,他会把两个属性粘在一起,并在他们之间建立一条通信通道 Binding binding = new Binding(); //设置源对象 binding.Source = tree; //设置源属性 binding.Path = new PropertyPath("SelectedItem.

WPF 数据绑定,界面刷新的两种方法-----INotifyPropertyChanged

.Netformwork4.0及以下版本 -------INotifyPropertyChanged 命名空间: System.ComponentModel 后台代码 public partial class DvrWnd : UserControl { public DvrWnd() { InitializeComponent(); } private void InitInfo() { for (int i = 0; i < 10; i++) { DvrInfo dvrInfo = new

WPF——数据绑定(二)绑定方法—绑定本地对象

注意:本人初学WPF,文中表达或技术性问题请勿见怪,欢迎指正,谢谢 标记拓展语法:绑定到本地对象 什么是绑定到本地对象,我个人理解就是实现UI层上两个或多个控件的相互关联,一个控件的状态改变,导致另一个控件状态随机改变, 废话不多说,直接贴上代码,代码目的是实现一个TextBox和CheckBox的相互关联,选中CheckBox,则TextBox可用,否则不可用. <!--MainWindow.xaml--> <Window x:Class="Binding_1.MainWin