zoukankan      html  css  js  c++  java
  • wpf数据绑定

    写在前面

    WPF中常常有这样的情况:需要在UI上显示一些信息,比如显示一张图片的信息,信息结构是:

      图片名:Xxx
      图片尺寸:Xxx              
    

    而其中的 Xxx 通常通过数据绑定来获得, Xxx 前面的内容是需要在xaml中写死的,这个时候如何布局比较方便呢?
    可以使用StringFormat来简单实这个需求.


    StringFormat的使用

    看下面的代码示例:

    <Textbox Margin="5" Grid.Row="2" Grid.Column="1"
    		 Text="{BindingPath=UnitCost,StringFormat={}{O:C}}">  
    </TextBox>
    

    这段代码初步演示了如何使用StringFormat格式字符串.
    下面的图中展示了一些常用的字符串格式:


    下面展示一下如何使用StringFormat解决开头提到的需求;
    假如在TextBlock的Text绑定了后台的一字符串来展示信息,如果希望在该字符串的前后加上一些提示或者后缀什么的,可以像下面这样来写:

    <TextBlock Text="Binding Path=Name,StringFormat={}Xxxx{0}Xxxx"/>
    

    上面的代码中Xxxx就是我们可以随意添加的文字内容,前面就会被展示在绑定的内容的前面,后面的就在后面


    下面通过一个Demo来说明一下

    • 我使用VS2017建立一个项目:StringFormatDemo

    • 项目目录如下图:

    • 简单的User类的代码:

      User
      namespace StringFormatDemo
      {
          public class User
          {
              public string FirstName { get; set; }
              public string LastName { get; set; }
              public int Age { get; set; }
              public string Sex { get; set; }
          }
      }
      
      
    • AppVM类的代码

      AppVM
      using Microsoft.Practices.Prism.ViewModel;
      namespace StringFormatDemo
      {
          class AppVM:NotificationObject
          {
              public AppVM()
              {
                  User = new User
                  {
                      FirstName = "La",
                      LastName = "Laggage",
                      Sex = "男",
                      Age = 20
                  };
              }
      
              private User _user;
              public User User
              {
                  get => _user;
                  set
                  {
                      if (value == _user) return;
                      _user = value;
                      RaisePropertyChanged(nameof(User));
                  }
              }
      
          }
      }
      
    • 前台xaml

      前台xaml
      <Window x:Class="StringFormatDemo.MainWindow"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
          xmlns:local="clr-namespace:StringFormatDemo"
          mc:Ignorable="d" Foreground="Black" FontSize="16"
          Title="MainWindow" Height="450" Width="800">
      <Window.DataContext>
          <local:AppVM/>
      </Window.DataContext>
      <Grid>
          <Border Height="150" Width="240">
              <StackPanel>
                  <StackPanel.Resources>
                      <Style TargetType="TextBlock">
                          <Setter Property="Padding" Value="8"></Setter>
                      </Style>
                  </StackPanel.Resources>
                  <TextBlock Foreground="Black" Text="{Binding Path=User.FirstName,StringFormat={}FirstName: {0}}"/>
                  <TextBlock Text="{Binding Path=User.LastName,StringFormat={}LastName: {0}}"/>
                  <TextBlock Text="{Binding Path=User.Sex,StringFormat={}Sex: {0},FallbackValue=failed}"/>
                  <TextBlock Text="{Binding Path=User.Age,StringFormat={}Age: {0}}"/>
              </StackPanel>
          </Border>
      </Grid>
      </Window>
      

    这个Demo非常非常非常的简单,MainWindow的xaml中实例化AppVM作为DataContext,然后在StackPannel中绑定了AppVM下的User属性,并显示User的FirstName,LastName ... 最终效果如下:

    通过StringFormat成功在 FirstName LastName ... 前加上了一些说明;

  • 相关阅读:
    在类的外面调用类的private函数
    Django多表操作
    Django聚合与分组查询中value与annotate的顺序问题
    Django路由控制
    cookie与session的区别与关系
    面试题之改变对象的类
    python实现双向链表
    python实现单向循环链表
    python中的顺序表
    顺序表
  • 原文地址:https://www.cnblogs.com/Laggage/p/10403225.html
Copyright © 2011-2022 走看看