完善主體資料,免費贈送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
    主站蜘蛛池模板: 在线播放偷拍一区精品| 麻豆高清免费国产一区| 精品无码一区二区三区在线| 一区二区三区视频| 韩国福利一区二区三区高清视频| 亚洲av无码一区二区三区天堂| 国产在线精品一区二区三区直播| 日韩精品一区二区三区中文版| 极品人妻少妇一区二区三区| 亚洲国产精品无码久久一区二区| 精品综合一区二区三区| 精品国产一区二区三区香蕉事| 精品国产AV一区二区三区| 日本免费一区二区三区四区五六区 | 国产成人高清视频一区二区 | 午夜福利av无码一区二区| 狠狠做深爱婷婷综合一区 | 国产精品无码AV一区二区三区 | 成人精品一区二区三区中文字幕| 日本香蕉一区二区三区| 欧美日韩精品一区二区在线观看| 51视频国产精品一区二区| 农村乱人伦一区二区| 人妻无码久久一区二区三区免费 | 麻豆国产一区二区在线观看| 肉色超薄丝袜脚交一区二区 | 精品视频一区二区三区四区五区| 午夜视频久久久久一区 | 国产自产在线视频一区| 精品一区二区久久久久久久网站| 久久精品国产一区二区三区日韩| 国产AV一区二区三区传媒| 无码AV天堂一区二区三区| 中文字幕精品一区二区日本| 日韩一区二区在线视频| 国模视频一区二区| 国产福利一区二区| 无人码一区二区三区视频| 日本一区二区三区在线观看| 色狠狠色狠狠综合一区| 国产精品久久亚洲一区二区|