不卡视频在线观看_三级网站视频在线观看_91精品网站_国产综合一区二区

完善主體資料,免費贈送VIP會員!
* 主體類型
* 企業名稱
* 信用代碼
* 所在行業
* 企業規模
* 所在職位
* 姓名
* 所在行業
* 學歷
* 工作性質
請先選擇行業
您還可以選擇以下福利:
行業福利,領完即止!

下載app免費領取會員

NULL

ad.jpg

二次開發教程:WPF通過異常來驗證用戶輸入

發布于:2019-08-23 17:04:40

網友投稿

更多

在WPF中使用數據綁定,如果用戶輸入和綁定類型轉換失敗,控件就會顯示出現錯誤的模板,


比如一個Textbox綁定到一個int 屬性,如果用戶輸入一個string,那這個textbox就會顯示錯誤模板,一般會是在TextBox外顯示紅線,


當然這個模板也可以自己設置。那如果這個界面有一個確定Button,我想實現TextBox里輸入非數字和數字值小于0時Button都不可用,


那該怎么實現呢?




namespace WpfApplication6

{

    /// <summary>

    /// MainWindow.xaml 的交互邏輯

    /// </summary>

    public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

            this.DataContext = new ViewModel(this);

        }

    }

    public class ViewModel : INotifyPropertyChanged

    {

        private Window win = null;

        private int errors = 0;

        private int num1 = 0;

        public int Num1

        {

            get

            {

                return num1;

            }

            set

            {

                num1 = value;

                if (num1 < 0)

                {

                    throw new ArgumentException("值太小!");

                }

            }

        }

        private int num2 = 0;

        public int Num2

        {

            get

            {

                return num2;

            }

            set

            {

                num2 = value;

                if (num2 > 0)

                {

                    throw new ArgumentException("值太大!");

                }

            }

        }

        public ICommand OK_Command

        {

            get

            {

                return new ReLayCommand(() => {



                },()=> {

                    return errors == 0;

                });

            }

        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnRaisePropertyChanged(string name)

        {

            if (PropertyChanged != null)

            {

                PropertyChanged(this, new PropertyChangedEventArgs(name));

            }

        }

        public ViewModel(Window win)

        {

            this.win = win;

            Validation.AddErrorHandler(win, ErrorHandler);

        }



        private void ErrorHandler(object sender, ValidationErrorEventArgs e)

        {

            if (e.Action == ValidationErrorEventAction.Added)

            {

                errors += 1;

            }

            if (e.Action == ValidationErrorEventAction.Removed)

            {

                errors -= 1;

            }

            OnRaisePropertyChanged("OK_Command");

        }

    }

    public class ReLayCommand : ICommand

    {

        private Action _execute = null;

        private Func<bool> _canExecute = null;

        public event EventHandler CanExecuteChanged;

        public ReLayCommand(Action _execute, Func<bool> _canExecute = null)

        {

            this._execute = _execute;

            this._canExecute = _canExecute;

        }

        public bool CanExecute(object parameter)

        {

            if (_canExecute != null)

                return _canExecute();

            return true;

        }

        public void Execute(object parameter)

        {

            if (_execute != null)

                _execute();

        }

    }

}


<Window x:Class="WpfApplication6.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WpfApplication6"

        mc:Ignorable="d"

        Title="MainWindow" Height="350" Width="525">

    <Window.Resources>

        <Style TargetType="TextBox">

            <Style.Triggers>

                <Trigger Property="Validation.HasError" Value="true">

                    <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors)[0].ErrorContent}"/>

                </Trigger>

            </Style.Triggers>

        </Style>

    </Window.Resources>

    <Grid>

        <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="140,76,0,0" TextWrapping="Wrap" Text="{Binding Path=Num1,UpdateSourceTrigger=PropertyChanged,NotifyOnValidationError=True,ValidatesOnExceptions=True}" VerticalAlignment="Top" Width="120"/>

        <TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="23" Margin="140,160,0,0" TextWrapping="Wrap" Text="{Binding Path=Num2,UpdateSourceTrigger=PropertyChanged,NotifyOnValidationError=True,ValidatesOnExceptions=True}" VerticalAlignment="Top" Width="120"/>

        <Button x:Name="button" Command="{Binding Path=OK_Command}" Content="Button" HorizontalAlignment="Left" Margin="129,239,0,0" VerticalAlignment="Top" Width="75"/>

    </Grid>

</Window>

本文版權歸腿腿教學網及原創作者所有,未經授權,謝絕轉載。

未標題-1.jpg

上一篇:二次開發教程:Revit開發之調用Revit命令的另一種方法

下一篇:二次開發教程:Revit開發之多線程

60acb4e0ef112.png
不卡视频在线观看_三级网站视频在线观看_91精品网站_国产综合一区二区

      欧美日韩午夜视频在线观看| 亚洲一区三区视频在线观看| 国产麻豆精品theporn| 欧美激情日韩| 国产精品成人久久久久| 国产精品三级久久久久久电影| 欧美四级在线| 国内精品久久久久影院色 | 香蕉乱码成人久久天堂爱免费| 一区二区欧美日韩| 久久美女性网| 欧美99在线视频观看| 国产精品久久久久久av下载红粉 | 国内精品久久久久久久97牛牛| 激情小说另类小说亚洲欧美| 国产在线不卡视频| 亚洲国产成人久久综合| 亚洲天堂男人| 麻豆成人在线播放| 欧美日韩一区二区视频在线 | 欧美一区三区二区在线观看| 欧美精品大片| 一区二区三区欧美日韩| 在线一区二区三区做爰视频网站 | 久久精品国产99| 国产精品国产三级国产普通话三级 | 久久精品国产精品亚洲精品| 欧美体内谢she精2性欧美| 亚洲成人直播| 久热re这里精品视频在线6| 国产精品久久久久av免费| 日韩视频一区二区三区| 欧美区日韩区| 一本在线高清不卡dvd | 国产日韩精品久久| 亚洲私人影院在线观看| 欧美日韩国产成人在线| 在线视频国产日韩| 久久久水蜜桃| 国产日韩精品一区二区三区在线| 黄色欧美日韩| 快she精品国产999| 在线欧美视频| 国产精品mv在线观看| 亚洲一区二区三区免费视频| 国产欧美在线观看| 久久精品视频在线播放| 韩国精品一区二区三区| 麻豆国产精品777777在线| 在线精品亚洲| 国产精品第一区| 新67194成人永久网站| 精品成人一区| 欧美日韩不卡一区| 亚洲欧美网站| 在线一区二区视频| 亚洲国产免费看| 国产精品久久久一区二区| 久久视频在线视频| 午夜电影亚洲| 亚洲每日在线| 亚洲福利免费| 精品99一区二区| 欧美人与禽猛交乱配| 欧美一区二区三区在线| 欧美高清在线观看| 亚洲午夜女主播在线直播| 新狼窝色av性久久久久久| 欧美日韩无遮挡| 久久婷婷久久一区二区三区| 日韩视频精品在线观看| 国产一区深夜福利| 国产精品白丝av嫩草影院| 欧美99久久| 亚洲欧美日韩成人高清在线一区| 亚洲国产精品va在线看黑人动漫| 国产欧亚日韩视频| 欧美性淫爽ww久久久久无| 欧美精品在线免费| 国产欧美三级| 在线观看免费视频综合| 亚洲成人中文| 亚洲一区图片| 女主播福利一区| 欧美激情第4页| 国产精品一区二区三区四区| 国产精品久久久久久久一区探花| 国产精品视频免费一区| 好男人免费精品视频| 亚洲精品亚洲人成人网| 亚洲主播在线播放| 免费亚洲网站| 欧美视频一区二区三区| 国产精品视频精品| 日韩视频精品| 欧美在线亚洲在线| 欧美伦理91| 影音欧美亚洲| 久久国产精品99国产精| 欧美日韩在线视频观看| 在线精品视频免费观看| 欧美在线国产| 国产日本欧洲亚洲| 欧美一区二区免费| 国产精品美女主播在线观看纯欲| 亚洲激情在线视频| 久久精视频免费在线久久完整在线看| 欧美日韩中文字幕在线| 亚洲乱码日产精品bd| 欧美极品在线播放| 好吊视频一区二区三区四区| 日韩一级大片在线| 欧美精品久久99| 亚洲免费福利视频| 欧美精品一区二区久久婷婷| 在线观看一区二区精品视频| 欧美中文字幕精品| 国产一区二区三区高清播放| 亚洲欧美日韩精品| 欧美日韩一区二区三区| 在线综合亚洲| 国产欧美一区二区精品秋霞影院| 亚洲一区二区黄| 狠狠色综合网| 欧美www视频| 日韩亚洲综合在线| 国产乱码精品1区2区3区| 午夜精品久久久久久久久久久| 国产日产亚洲精品| 久久免费黄色| 亚洲精品一区久久久久久| 欧美日韩国产精品成人| 亚洲制服av| 亚洲电影免费观看高清完整版在线 | 亚洲欧美在线aaa| 激情丁香综合| 欧美日韩在线电影| 久久中文在线| 午夜精品av| 亚洲欧洲在线一区| 亚洲第一二三四五区| 国产精品国产三级国产普通话三级| 欧美一区二区观看视频| 夜夜嗨网站十八久久| 亚洲成色777777女色窝| 国产日韩欧美一区二区三区四区| 国产精品久久二区二区| 国产精品久久久久久亚洲毛片| 欧美日韩亚洲国产一区| 欧美区在线观看| 国产精品v日韩精品| 欧美日韩激情小视频| 国产精品v一区二区三区| 国产精品美腿一区在线看| 国产精品亚洲一区| 国产专区精品视频| 亚洲国产视频a| 亚洲一区免费在线观看| 久久精品成人欧美大片古装| 久久久精品日韩欧美| 欧美激情影院| 国产精品久久久久久久电影| 国产一区二区高清| 亚洲电影下载| 午夜精品一区二区三区四区| 久久综合九色综合久99| 欧美精品国产一区| 国产专区综合网| 亚洲婷婷免费| 欧美成人精品| 黑人极品videos精品欧美裸| 一本在线高清不卡dvd| 久久美女性网| 国产一区二区久久| 亚洲免费综合| 欧美日韩国产123| 亚洲高清不卡在线| 久久久久久伊人| 精品91视频| 久久精品中文字幕免费mv| 欧美日韩亚洲激情| 亚洲免费福利视频| 欧美国产日韩一二三区| 亚洲电影免费在线观看| 免费国产一区二区| 亚洲国产日本| 欧美欧美天天天天操| 亚洲美女av电影| 欧美三级不卡| 午夜精品在线视频| 国产区精品视频| 久久久蜜桃精品| 99视频一区| 国产亚洲精品一区二555| 亚洲免费人成在线视频观看| 国产精品色婷婷久久58| 羞羞色国产精品| 1024国产精品| 欧美亚洲第一页| 久久精品视频网|