• UWP x:bind


    x:bind 作为win10 新特性,它好在哪?为什么要用它。

    最近做UWP,对代码进行重构,对它有了一些了解。

    先说优点:

    1.性能高,内存小(相比传统的binding)

    没图没真相,我先上2张图。

    x:bind又叫 "compiled data bindings", 它是在编译的时候就确定了。

    以前的Binding,是运行时绑定,我想里面免不了各种反射。

    由于x:bind是编译时,所以必须是强类型,不能再是object类型(以前都是给datacontext赋值),这个特性提高了性能速度,但也带了不便,后面会讲。

    有点注意的是,由于是编译时,所以绑定的错误在编译时就会提示出来,方便调试。

    2. 如果不制定源的话,默认绑定源是page或者是usercontrol。

       <TextBlock Text="{x:Bind Title}"/>
        <Button Content="{x:Bind VM.Name}"/>
            
     public sealed partial class MainPage : Page
        {
            public string Title = "Hi x:bind";
            public ViewModel VM;
            public MainPage()
            {
                this.InitializeComponent();
                VM = new ViewModel();
            }
        }
    
    
        public class ViewModel
        {
            public string Name = "I'm a button";
            public void Click()
            {
    
            }
        }

    上面就是普通的用法。

    下面我讲一下怎么在模板里面绑定和怎么绑定事件。

     <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
            <Grid.Resources>
                <DataTemplate x:Key="dateTemplate" x:DataType="local:ViewModel">
                    <Button Content="{x:Bind Name}"/>
                </DataTemplate>
            </Grid.Resources>
          
            <ContentControl ContentTemplate="{StaticResource dateTemplate}" Content="{x:Bind VM}"/>
    
           
        </Grid>

    这里注意一定要给模板制定DataType,不然编译就会报错,强类型,没办法

    x:bind 可以绑定事件,在一定程度上简化之前用command 绑定的不便。

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    
            <Button x:Name="button" Content="Button" Click="{x:Bind VM.Click}" HorizontalAlignment="Left" Margin="126,258,0,0" VerticalAlignment="Top" Height="113" Width="103"/>
    
        </Grid>
     public sealed partial class MainPage : Page
        {
            public string Title = "Hi x:bind";
            public ViewModel VM;
            public MainPage()
            {
                this.InitializeComponent();
                VM = new ViewModel();
            }
        }
    
    
        public class ViewModel
        {
            public string Name = "I'm a button";
            public void Click()
            {
    
            }
        }

    说了这么多优点,那么缺点呢,至少我看来,由于是强类型,x:bind没法做到动态绑定,绑定源一定要是个强类型,不能再是object类型。

    只能说看需求,在可以得情况下,还是尽量使用x:bind,毕竟性能内存优势在那里摆着,实在不行,用binding也不是不可以的。

  • 相关阅读:
    dataset的transformations-变形记
    创建dataset的方法
    Codeforces Round #479 (Div. 3) D. Divide by three, multiply by two
    Codeforces Round #479 (Div. 3) C. Less or Equal
    Codeforces Round #479 (Div. 3) B. Two-gram
    Codeforces Round #479 (Div. 3) A. Wrong Subtraction
    GlitchBot -HZNU寒假集训
    Floyd 算法求多源最短路径
    dijkstra算法:寻找到全图各点的最短路径
    Wooden Sticks -HZNU寒假集训
  • 原文地址:https://www.cnblogs.com/FaDeKongJian/p/5090781.html
Copyright © 2020-2023  润新知