完善主体资料,免费赠送VIP会员!
* 主体类型
* 企业名称
* 信用代码
* 所在行业
* 企业规模
* 所在职位
* 姓名
* 所在行业
* 学历
* 工作性质
请先选择行业
您还可以选择以下福利:
行业福利,领完即止!

下载app免费领取会员

NULL

ad.jpg

二次开发教程:WPF 使用INotifyDataErrorInfo小例子

发布于:2019-07-25 15:27:58

网友投稿

更多

<Window x:Class="ErrorsTest.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:ErrorsTest"

        mc:Ignorable="d"

        Title="MainWindow" Height="268.884" Width="411.588">    

    <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" Text="{Binding Path= N,ValidatesOnNotifyDataErrors=True}"  

                 HorizontalAlignment="Left" Height="23" Margin="97,92,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" >

        </TextBox>

        <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="217,158,0,0" 

                VerticalAlignment="Top" Width="75"/>

    </Grid>

</Window>




    public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

            this.DataContext = new ViewModel();

        }

    }


    public class ViewModel : INotifyDataErrorInfo,INotifyPropertyChanged

    {

        private Dictionary<string, List<string>> _errors = new Dictionary<string, List<string>>();

        private int n = 0;

        public int N

        {

            get

            {

                return n;

            }

            set

            {

                List<string> te = new List<string>();

                if(value<0)

                {

                    te.Add("不能小于0!");

                }

                if(value%2!=0)

                {

                    te.Add("不能位奇数!");

                }

                SetErrors("N", te);

                n = value;

            }

        }


        public bool HasErrors

        {

            get

            {

                return _errors.Count != 0;

            }

        }


        public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;

        public event PropertyChangedEventHandler PropertyChanged;

        private void RaiseNotifyPropertyChanged(string name)

        {

            if(null!=PropertyChanged)

            {

                PropertyChanged(this, new PropertyChangedEventArgs(name));

            }

        }

        private void SetErrors(string name,List<string> errors)

        {

            if (errors.Count == 0)

            {

                errors.Remove(name);

            }

            else

            {

                if (_errors.ContainsKey(name))

                {

                    _errors[name] = errors;

                }

                else

                {

                    _errors.Add(name, errors);

                }

            }

            RaiseErrorsChanged(name);

        }

        private void RaiseErrorsChanged(string name)

        {

            if(ErrorsChanged!=null)

            {

                ErrorsChanged(this, new DataErrorsChangedEventArgs(name));

            }

        }


        public IEnumerable GetErrors(string propertyName)

        {

            return _errors[propertyName];

        }

    }

本文版权归腿腿教学网及原创作者所有,未经授权,谢绝转载。

未标题-1.jpg

上一篇:二次开发教程:Revit开发自定义警告

下一篇:二次开发教程:C#DynamicObject和ExpandoObject

60acb4e0ef112.png