XAML数据绑定相关

XAML的数据绑定,知乎上看到说MVVM的最大优点为交互设计和业务设计是分离开的。

所以我就在考虑关于这个具体的分离要做到哪一步比较科学。


实际动手才能说明问题。

这里拿TextBox举例,我们通常TextBox用于放内容,单向或者双向的交互。

而MVVM的哲学是设计和业务逻辑分离,那么对于UI设计来说,可能需要的方式为你

"我从你那里拿数据就好,具体怎么布局和展示由我负责,数据的来和去由你负责。"

没错,那就是绑定了...

根据XAML的树形继承结构,如果在其父级别定义一个类,用于托管整个相关的数据,

整个UI的设计与业务逻辑的融合就可以实现就可以比较简单。


具体在语法上

<Grid  
            x:Name="GridSerialOut" 
            HorizontalAlignment="Stretch"
            VerticalAlignment="Stretch"
            Margin="0,0,0,0" Grid.Row="1" >
            <TextBox
        		Text="{Binding SerialOutBaudRate}"
        		HorizontalAlignment="Left" Height="23" Margin="83,39,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
            <Button 
                Click="ButtonSerialOut_Click" 
                Content="Button" 
                HorizontalAlignment="Right"   Height="44" 
                VerticalAlignment="Bottom" Width="44"                
                Margin="10,10,10,10" />
        </Grid>

在具体的实现上,我目前正在计划学习期拿来练手的项目为,自用小工具,串口转发


需要定义一个Grid容器,用来展示所有跟选用的串口相关的信息(双向)。在上述描述中可以看到TextBox的属性Text已经绑定了描述 

        		Text="{Binding SerialOutBaudRate}"

同时其归属

<Grid  
            x:Name="GridSerialOut"

所以我们在init的时候添加代码,将GridSerialOut的DataContext变量到指定的托管类。就可以实现数据绑定。

 public partial class MainWindow : Window
    {
        private Data_view_module _module;
        public MainWindow()
        {
            InitializeComponent();

            _module = new Data_view_module
            {
                SerialOutBaudRate = "921600",
            };
            this.LayoutRoot.DataContext = _module;
        }
    }

其中用到了一个C#的类,需要自行定义,我这里做一个简易的示例:

    class Data_view_module : INotifyPropertyChanged
    {
        private string _SerialOutBaudRateText;
        public event PropertyChangedEventHandler PropertyChanged;
        public string SerialOutBaudRate
        {
            get { return _SerialOutBaudRateText; }
            set { 
                if(value != _SerialOutBaudRateText){
                    _SerialOutBaudRateText = value;
                    NotifyPropertyChanged("SerialOutBaudRate");
                }
            }
        }
        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
    }

最终就可以实现将_module 类绑定到GridSerialOut下,而其对应的

public string SerialOutBaudRate

自然就对应绑定到了XAML描述下的TextBox.Text了

转载于:https://my.oschina.net/mummy108/blog/372011

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值