wpf学习笔记-前台端数据绑定

1 前端:

       <TextBox   Text="{Binding Path=host, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />

绑定元素属性  {Binding Path=host, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}

2 模型:

 
    [Serializable]
    public class XmlVisitInfo:INotifyPropertyChanged
    {
      public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, e);
            }
        }
        private string myPort { get; set; }
        public string port
        {
            get { return myPort; }
            set { myPort = value; OnPropertyChanged(new PropertyChangedEventArgs("port")); }
        }
    }

 实现INotifyPropertyChanged接口,实现PropertyChanged属性

3 后台绑定值

 XmlVisitInfo info = new XmlVisitInfo(); 
this.DataContext = info;

模型数据赋值给DataContext 

4  后台获取值

 XmlVisitInfo info = this.DataContext as XmlVisitInfo;

扩展知识:

WPF支持双向绑定,即从源到目标以及目标到源,要支持双向绑定,只需要设置Binding对象的Mode属性为TwoWay即可,修改后的XAML代码为:

当使用OneWay或TwoWay绑定时,改变后的值会立即从源传播到目标。然而,从目标到源传播未必会立即发生。因为,它们的行为是由Binding.UpdateSourceTrigger属性控制,该属性可以使用下图列出的某个值。注意,UpdateSourceTrigger属性值并不影响目标的更新方式,它仅仅控制TwoWay模式或OneWayToSource模式的绑定更新源的方式。而文本框正是使用LostFocus方式从目标向源进行更新的。

绑定非元素对象

   上面都是介绍如何链接两个元素的绑定,但是在数据驱动的应用程序中,更常见的情况是创建从一个对象中提起数据的绑定表达式。不过希望绑定的信息必须存储在一个公有属性中。因为WPF绑定不能获取私有信息或公有字段。

  当绑定一个非元素对象时,不能使用Binding.ElementName属性,但可以使用以下属性中的一个:

  • Source——该属性是指向源对象的引用,即提供数据的对象。
  • RelativeSource——该属性使用RelativeSource对象指定绑定源的相对位置,默认值为null。
  • DataContext属性——如果没有使用Source或RelativeSource属性指定一个数据源,WPF会从当前元素开始在元素树中向上查找。检查每个元素的DataContext属性,并使用第一个非空的DataContext属性。当然你也可以自己设置DataContext属性。

使用DataContext属性来绑定一个自定义对象的属性。首先自定义一个实现了INotifyPropertyChanged接口的类。这个接口是为了发出属性更改的通知,即实现了这个接口将会实现当源对象的公共属性发生改变时,该属性的值会立即响应到界面上显式。当然不实现这个接口的对象也可以绑定控件中,只要被绑定是公有属性就可以。

绑定grid的列表的值 

1 设置datagrid 名字  x:Name

        <DataGrid x:Name="ipList">

2 设置行名字,并绑定每一行的值

  <DataGrid.Columns>
                <DataGridTextColumn   Header="域名"  Binding="{Binding Path=url, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="*"/>
            </DataGrid.Columns>

3 给datagrid赋值

 ipList.ItemsSource = new info();

4 获取选中值

ipList.SelectedItem;

注意:所有绑定控件,都要在初始化的时候赋一个初值。不然无法获取到值

完整代码:

    <Grid Margin="0,196,0,0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="49*"/>
            <ColumnDefinition Width="23*"/>
        </Grid.ColumnDefinitions>
        <DataGrid Grid.Row="0"  RowHeaderWidth="0"   AlternationCount="2"  AutoGenerateColumns="False" FontSize="15" CanUserAddRows="False" CanUserDeleteRows="False" IsReadOnly="True" HorizontalScrollBarVisibility="Hidden" EnableRowVirtualization="False" IsEnabled="True" EnableColumnVirtualization="False" VerticalGridLinesBrush="#FFBCC1BC" HorizontalGridLinesBrush="#FFBCC1BC" Margin="0,-117,0,0" Grid.ColumnSpan="2" x:Name="ipList">
            <DataGrid.Columns>
                <DataGridTextColumn   Header="域名"  Binding="{Binding Path=url, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="*"/>
                <DataGridTextColumn   Header="编码" Binding="{Binding Path=encoding, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="50"/>
                <DataGridTextColumn Header="正则表达式" Binding="{Binding Path=regex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="*"/>
            </DataGrid.Columns>
        </DataGrid>
        <Button Content="添加" HorizontalAlignment="Left" Margin="15,-181,0,0" VerticalAlignment="Top" Width="74" RenderTransformOrigin="0.899,0.568" Click="btnAddIpList"/>
        <Button Content="删除" HorizontalAlignment="Left" Margin="114,-181,0,0" VerticalAlignment="Top" Width="76" Click="btn_Delete"/>
    </Grid>

参考资料

https://www.cnblogs.com/zhili/p/WPFBinding.html

猜你喜欢

转载自blog.csdn.net/qq_25744257/article/details/85775607