WPF 数据绑定类属性 和数据更新 以及数据交互

WPF中数据绑定是一个非常强大的功能,不仅可以绑定后台数据,还可以进行实时更新。

数据绑定实例 :

在后台创建模型类,然后在标签页面进行导入并绑定。

第一步: 
// 在后台创建模型类
public class MyData
{
    public string Name { get; set; } = "李逵";
}

第二步:
// 在标签页面导入实体类
xmlns:c ="clr-namespace:WpfProgram.Entity"

第三步:
// 在标签页面指定数据源
<Grid.Resources>
    <c:MyData x:Key="mydataScource"/>
</Grid.Resources>

第四步:
// 在标签页面设置或着获取参与数据绑定时候的上下文,(通俗来讲以后可以在代码里面获取对象)
<Grid.DataContext>
    <Binding Source="{StaticResource mydataScource}"/>
</Grid.DataContext>

第五步: 
// 在标签页面绑定到目标标签上 label:{Bingding path=对象模型属性}
<Label Content="{Binding Path=Name}" FontSize="20" >
</Label>

数据更新实例:

// 实现数据更新需要再模型类里面添加INotifyPropertyChanged接口
// INotifyPropertyChanged 检查属性是否发生变化的接口

数据更新 :  
// 第一步: 在后台设置模型类
public class MyData : INotifyPropertyChanged
{
    public string Name { get; set; } = "李逵";

    // 实现INotifyPropertyChanged这个接口的PropertyChanged属性
    // PropertyChanged类型是委托函数
    public event PropertyChangedEventHandler? PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        // 当属性修改的时候触发PropertyChanged事件,紧跟着调用该函数
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

《--第二步: 标签设计并绑定数据--》
<Grid Name="g1">
    <Grid.Resources>
        <c:MyData  x:Key="s1"/>
    </Grid.Resources>
    <Grid.DataContext>
        <Binding Source="{StaticResource s1}" />
    </Grid.DataContext>
    
    <!--把数据绑定给Grid标签,Grid下子标签都可以使用-->
    <Label Width="100"
           Height="40"
           Content="{Binding Path=Name}"
           VerticalAlignment="Top">
    </Label>
</Grid>

// 第三步: 在cs页面创建模型类对象,然后将对象赋值给Grid的DataContext属性 实现数据更新
MyData data = new MyData();
data.Name = "鲁提辖";
this.g1.DataContext = data;

数据交互实例:

此方法在模型类数据变化时立马调用INotifyPropertyChanged的PropertyChanged函数,比较之前的更新方法此方法更新速度更快,实现数据更新,界面跟着更新。

INotifyPropertyChanged接口 :
实现数据更新需要再模型类里面添加INotifyPropertyChanged接口
INotifyPropertyChanged 检查属性是否发生变化的接口。

数据交互 : 
// 第一步在后台设置模型类 
// INotifyPropertyChanged 检查属性是否发生变化的接口,eg:Name = "zs"
public class book: INotifyPropertyChanged
{
    private string bookName; // 私有字段
    public string BookName // 公有属性
    {
        get // 在 a.name执行get函数
        {
            return bookName; 
        } 
        set // 在a.Name = "zs"这一句执行
        {
            bookName = value;
            OnProChanged("BookName");
        }
    }
    // 实现接口的成员Hander方法
    public event PropertyChangedEventHandler? PropertyChanged;
    public void OnProChanged(string name)
    {
        // 当属性发生变化的时候 调用该函数
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
    }
}

// 第二步设置标签布局并且进行数据绑定
<Grid Name="g1">
    <Label Width="100"
           Height="40"
           Background="Red"
           HorizontalAlignment="Left"
           VerticalAlignment="Top"
           Content="{Binding Path=BookName}"></Label>
    <Button Width="100"
           Height="40"
           Background="Red"
           HorizontalAlignment="Center"
            Click="Button_Click"
           VerticalAlignment="Bottom"
           Content="点击"></Button>
</Grid>

// 第三步在cs页面创建模型类对象,然后将对象赋值给Grid的DataContext属性 实现数据更新
public Window数据绑定二和数据更新二()
{
    InitializeComponent();
    g1.DataContext = b; // 数据绑定
}
//创建模型类对象并且赋初始值
book b = new book() { 
BookName = "111",};

//数据交互
private void Button_Click(object sender, RoutedEventArgs e)
{
    // 只用修改属性界面也会跟着发生改变
    b.BookName = "天魔神谭率";
}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值