WPF课堂例子

来源:互联网 发布:linux下载安装jdk1.8 编辑:程序博客网 时间:2024/06/01 10:12
1:界面架构有:<Grid>  <DockPanel>  <StackPanel>        

                 详细可看:https://www.cnblogs.com/mq0036/p/6232331.html

2:新建一个class MyData类

class MyData
    {
        private string data = "这是个模型";
        public string Data
        {
            get { return data; }
            set { data = value; }
        }
    }

界面中添加 

<StackPanel>
        <TextBox Text="{Binding Data}"></TextBox> 将后台数据绑定到界面中的TextBox中
        <Button Content="查看"></Button>
    </StackPanel>

后台映射这个类:

public partial class MainWindow : Window
    {
        MyData md;
        public MainWindow()
        {
            InitializeComponent();
            md = new MyData();
            this.DataContext = md;  //全部都是用这个类传递数据
        }
    }

3:增加一个点击按钮,需要设置Resources、CommandBindings,并在Excuted中设置点击的事件,CanExecute表示按钮是否可用

前台:

<Window.Resources>
        <RoutedCommand x:Key="ShowData"></RoutedCommand>
    </Window.Resources>


    <Window.CommandBindings>
        <CommandBinding Command="{StaticResource ShowData}" Executed="ShowData_Executed" CanExecute="ShowData_CanExecuted"></CommandBinding>
    </Window.CommandBindings>
    
    <StackPanel>
        <TextBox Text="{Binding Data}"></TextBox>
        <Button Content="查看" Command="{StaticResource ShowData}"></Button>
    </StackPanel>

后台添加:

 private void ShowData_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            MessageBox.Show(md.Data);
        }


        private void ShowData_CanExecuted(object sender, CanExecuteRoutedEventArgs e)
        {
            e.CanExecute = true;
        }

增加 UpdateSourceTrigger=PropertyChanged 后,前台数据改变,后台的数据可以时时改变

        <TextBox Text="{Binding Data, UpdateSourceTrigger=PropertyChanged}"></TextBox>

4:增加清除功能

前台

<Window.Resources>
        <RoutedCommand x:Key="ShowData"></RoutedCommand>
        <RoutedCommand x:Key="ClearData"></RoutedCommand>
    </Window.Resources>


    <Window.CommandBindings>
        <CommandBinding Command="{StaticResource ShowData}" Executed="ShowData_Executed" CanExecute="ShowData_CanExecuted"></CommandBinding>
        <CommandBinding Command="{StaticResource ClearData}" Executed="ClearData_Executed" CanExecute="ClearData_CanExecuted"></CommandBinding>
    </Window.CommandBindings>


    <StackPanel>
        <TextBox Text="{Binding Data, UpdateSourceTrigger=PropertyChanged}"></TextBox>
        <Label Content="{Binding Data}"></Label>
        <Button Content="查看" Command="{StaticResource ShowData}"></Button>
        <Button Content="清除" Command="{StaticResource ClearData}"></Button> 
    </StackPanel>

后台:

private void ClearData_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            md.Data = string.Empty;
        }


        private void ClearData_CanExecuted(object sender, CanExecuteRoutedEventArgs e)
        {
            e.CanExecute = true;
        }

点击清除发现文本卡框中的数据并没有清空,然而查看时却已经清空了,说明数据已经改变了,只是没有实时的显示出来

需要在原来的数据类中添加一个已经写好的继承类:INotifyPropertyChanged,当属性值改变时会操作

 class MyData : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private string data = "这是个模型";
        public string Data
        {
            get { return data; }
            set
            {
                if (Data == value) return;
                data = value;//这个不能改成Data
                if (PropertyChanged != null)
                {
                    PropertyChanged(this,new PropertyChangedEventArgs("Data"));
                }
            }
        }
    }


原创粉丝点击