• [WPF]数据绑定Demo


    目录

    1、View模型代码

    2、ViewModel模型代码

    3、数据模型

    4、样例演示

    5、一些知识点


    这里简单实现一个listbox绑定的功能,符合MVVM模型。

     

    View模型代码(View视图以及窗体类的后台代码)


    <Grid>
           <ListBox Name="ListBox">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock Text="{Binding Path=Name, Mode=TwoWay}" />
                            <TextBox Text="{Binding Path=Password}" />
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
    </Grid>
    /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
                ViewModel model=new ViewModel(this);
                this.ListBox.ItemsSource = model.users;
    
                Task.Run(() =>
                {
                    for (int i = 0; i < 100; i++)
                    {
                        model.users[0].Name = i.ToString();
                        Console.WriteLine(i);
                        Thread.Sleep(1000);
                    }
                
                
                });
    
            }
        }

    ViewModel模型代码


     /// <summary>
        /// 视图模型
        /// </summary>
        public class ViewModel
        {
            public List<User> users { get; set; }
    
            public ViewModel(MainWindow window)
            {
                users = new List<User>();
                for (int i = 0; i < 5; i++)
                {
                    var user = new User()
                    {
                        Name = "testname",
                        Password = "123456"
                    };
                    users.Add(user);
                }
            }
        }

    数据模型


      /// <summary>
        /// 数据模型  
        /// </summary>
        public class User:INotifyPropertyChanged
        {
            private string _name;
            public string Name
            {
                get => _name;
                set
                {
    
                    _name = value;
                    //这里通知说明数据发生改变了,调用OnPropertyChanged方法
                    OnPropertyChanged(nameof(Name));
                }
            }
            private string _password;
            public string Password
            {
                get => _password;
                set
                {
                    _password = value;
                    OnPropertyChanged(nameof(Password));
                }
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            /// <summary>
            /// 这里事件派发
            /// </summary>
            /// <param name="propertyName"></param>
            [NotifyPropertyChangedInvocator]
            protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
        }

    样例演示


    一些知识点

     Text="{Binding Path=Name, Mode=TwoWay}" 

    可以直接写成:

     Text="{Binding Name}" 

    因为默认就是双向绑定,也可以不加Path,效果一样。

    关于数据绑定这一块的详细说明和底层实现可以看这几个博客,我这里就不照抄了:

    第一个:WPF学习之数据绑定

    第二个:WPF入门教程系列十五——WPF中的数据绑定(一)

    https://github.com/li-zheng-hao
  • 相关阅读:
    js 注意
    JS学习大作业-Excel
    js继承
    转载:margin外边距合并问题以及解决方式
    CSS属性选择器和部分伪类
    HTML使用CSS样式的方法
    link元素 rel src href属性
    【2020.01.06】SDN大作业
    【2019.12.11】SDN上机第7次作业
    【2019.12.04】SDN上机第6次作业
  • 原文地址:https://www.cnblogs.com/lizhenghao126/p/11053603.html
Copyright © 2020-2023  润新知