标签: idataerrorinfo

如何为多个BO属性定义IDataErrorInfo错误属性

我开始通过IDataErrorInfo接口在我的WPF项目中实现验证.我的业务对象包含多个带有验证信息的属性.如何获取与该对象关联的所有错误消息的列表.我的想法是,这就是Error属性的用途,但我不能追踪任何使用它来报告多个属性的人.

谢谢!

public string this[string property]
    {
        get {

            string msg = null;
            switch (property)
            {
                case "LastName":
                    if (string.IsNullOrEmpty(LastName))
                        msg = "Need a last name";
                    break;
                case "FirstName":
                    if (string.IsNullOrEmpty(LastName))
                        msg = "Need a first name";
                    break;

                default:
                    throw new ArgumentException(
                        "Unrecognized property: " + property);
            }
            return msg;

        }
    }

    public string Error
    {
        get
        {
            return null ;
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# wpf mvvm idataerrorinfo

10
推荐指数
2
解决办法
6397
查看次数

winforms中的IDataErrorInfo

可以在winforms应用程序中正确使用IDataError信息吗?在过去,我以通常的方式(1)进行绑定,并在特定控件的OnValidating事件中进行验证.我想将数据验证移动到域模型,以便我可以轻松地交换用户界面,以便所有逻辑都在一个地方.

我正在研究IDataErrorInfo,但我发现的所有内容都与WPF有关,开发中的应用程序严格来说是一个winforms应用程序.

我还注意到在WPF中使用的绑定是在System.Windows.Data中,我一直使用的绑定是在System.Windows.Forms中(当我尝试添加它时,我似乎没有作为一种资源 - 我正在使用3.5).来自属​​性"ValidatesOnDataErrors"的两者之间有区别吗?

(1)通常的方式是:

myControl.DataBindings.Add(new Binding("Text", this.domainModel, "Property"));
Run Code Online (Sandbox Code Playgroud)

c# idataerrorinfo winforms

9
推荐指数
1
解决办法
8155
查看次数

WPF中的验证 - 自定义验证规则或IDataErrorInfo

作为一个新的WPF程序员,我无法找到两种不同的方式来验证用户输入:

编写自定义验证规则以实现IDataErrorInfo的优缺点是什么,反之亦然?什么时候我比较喜欢一个?

更新:

虽然我已经得到了答案,但我找到了可能对其他人有帮助的相关文章.

validation wpf idataerrorinfo

9
推荐指数
1
解决办法
4190
查看次数

在WPF中的UserControl中的控件上显示验证错误模板

如何让WPF错误模板出现在WPF中UserControl的控件上?

我有一个UserControl包含两个标签,两个TextBox和一个CheckBox.其中一个TextBoxes表示实体的名称,它绑定到ViewModel公开的Model属性的Name属性,该属性是我的Window的DataContext.Model类实现了IDataErrorInfo接口,我通过单元测试确认,当Name为空时,通过属性索引器实现返回错误.我已经绑定了支持UserControl中的Name TextBox的Dependency Property,当遇到验证错误时,WPF错误模板在整个UserControl周围放置一个红色边框,而不仅仅是Name TextBox.

绑定到UserControl的名称字段如下.

<vc:MyUserControl ItemName="{Binding Model.Name, ValidatesOnDataErrors=True}" />
Run Code Online (Sandbox Code Playgroud)

我的UserControl的简化版本和支持DependencyProperty如下所示.

<UserControl>
    <Grid>
       <TextBox Text="{Binding ItemName}" />
    </Grid>
</UserControl>

public partial class MyUserControl: UserControl
{
    public static readonly DependencyProperty ItemNameProperty = 
        DependencyProperty.Register(
            "ItemName", 
            typeof(string), 
            typeof(MyUserControl), 
            new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)
    );

    public string ItemName
    {
        get { return (string)GetValue(ItemNameProperty); }
        set { SetValue(ItemNameProperty, value); }
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我发现的与此问题有关的信息都是关于Silverlight或使用转换器不显示红色边框(这对我来说没有意义).这些信息都在stackoverflow上找到.

有没有人能用WPF解决这个问题?我忽略了一些明显的东西吗

c# validation wpf mvvm idataerrorinfo

9
推荐指数
1
解决办法
1万
查看次数

IDataErrorInfo如何工作?

我目前正在寻找我的WPF应用程序的验证,并看到提到IDataErrorInfo.但是,很少有如何使用它的指南,更糟糕的是没有人解释它是如何工作的.

在MSND.com网站,这是得到安宁 MSDN

public class Person : IDataErrorInfo
{
    private int age;
    public int Age
    {
        get { return age; }
        set { age = value; }
    }

    public string Error
    {
        get
        {
            return null;
        }
    }

    public string this[string name]
    {
        get
        {
            string result = null;
            if (name == "Age")
            {
                if (this.age < 0 || this.age > 150)
                {
                    result = "Age must not be less than 0 or greater than 150.";
                }
            } …
Run Code Online (Sandbox Code Playgroud)

wpf idataerrorinfo

8
推荐指数
1
解决办法
3202
查看次数

DataAnnotations与IDataErrorInfo

DataAnnotations与IDataErrorInfo

两者的优点和缺点?一个优于另一个的好处?(特别是与MVC有关)

.net validation asp.net-mvc idataerrorinfo data-annotations

7
推荐指数
2
解决办法
3003
查看次数

IDataErrorInfo:如何知道所有属性是否有效?

我有一个WPFapplication(.Net 3.5),它使用IDataErrorInfoViewModel来验证输入.

它运行良好,用户控制获得正确的UI反馈.

问题是用户仍然可以更改所选元素,或保存此元素.

所以我的问题是:我怎么知道我的所有财产都有效?或者至少我所有显示的值都是有效的.目标是IsActive在这个结果上绑定一些

validation wpf idataerrorinfo

7
推荐指数
1
解决办法
8941
查看次数

视图模型是否实现了IDataErrorInfo以进行验证?

我有一个使用MVVM模式的应用程序,我想在用户填写信息时实现验证.

我想使用IDataErrorInfo,但我不知道我的视图模型是否实现了该接口,或者我创建新类是否更好.使用IDataErrorInfo和MVVM模式实现验证的最佳方法是什么?

编辑:我看到在一些例子中,实现是在模型中(它与视图模型不同),但在我的情况下,模型基本上是我在创建edmx模型时从数据库创建的POCO实体实体框架,所以我想避免修改这个实体所需要的,因为如果我不需要更新我的模型,我将不得不重新开始工作.

谢谢.

validation wpf mvvm idataerrorinfo

7
推荐指数
1
解决办法
1890
查看次数

Validation.HasError附加属性

我错过了什么?

1-风格

 <Style TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=Validation.HasError}" Value="true">
                <Setter Property="BorderBrush" Value="Blue" />
            </DataTrigger>
        </Style.Triggers>
        <Setter Property="MinWidth" Value="160" />
        <Setter Property="Margin" Value="0 7 0 0"/>
    </Style>
Run Code Online (Sandbox Code Playgroud)

2 - Viewmodel在视图中实现IDataErrorInfo 3- textBox

 <TextBox x:Name="FirstName" Text="{Binding Person.FirstName,  UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=true}"></TextBox>
Run Code Online (Sandbox Code Playgroud)

3 - 我使用Caliburn MVVM

我"BindingExpression路径错误:对 '对象' '' PersonWindowViewModel未找到 '验证' 属性 '(的HashCode = 38783181)' BindingExpression:路径= Validation.HasError;的DataItem = 'PersonWindowViewModel'(的HashCode = 38783181);目标元件是'TextBox'(Name ='FirstName'); target属性为'NoTarget'(类型'Object')"S

wpf mvvm idataerrorinfo caliburn

6
推荐指数
1
解决办法
5831
查看次数

展开时未显示WPF扩展器验证错误

使用MVVM.我有一个DataTemplate用于显示扩展器的扩展器,每个对象都有一些控件.

<DataTemplate>
    <Expander ExpandDirection="Down" IsExpanded="False">
        <Expander.Header>
            <TextBlock>
                <TextBlock.Text>
                    <MultiBinding StringFormat="Platform Group {0} {1}">
                        <Binding Path="PlatformGroupCode"/>
                        <Binding Path="PlatformGroupName"/>
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </Expander.Header>
        <vw:PlatformGroup HorizontalAlignment="Left"/>
    </Expander>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

在该视图内部是绑定到这2个属性的2个文本框.我IDataErrorInfo在我的VM中使用进行验证,我在主应用程序资源中使用了一种样式,将错误消息显示为工具提示:

<Style TargetType="{x:Type TextBox}">
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

添加新组时,2个属性具有默认值,这是无效的,因此我希望文本框为红色以提示用户输入数据.如果Expander的IsExpanded设置为true,则此方法有效.但如果它是假的,我必须扩展并更改其中一个文本框中的值,以便显示红色边框和工具提示.

我不想将扩展器设置为扩展,因为最终会有很多控件.扩展器扩展后如何才能显示红色边框?更好的是,是否有办法使新添加的扩展器扩展(当用户添加新组时,我将PlatformGroupviewModel添加到observablecollectionPlatformGroupviewModel中)?

编辑更多细节:顶级视图:

 <StackPanel Orientation="Vertical">
        <ScrollViewer VerticalScrollBarVisibility="Auto" MaxHeight="630">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="5*" />
                    <ColumnDefinition Width="5*" />
                </Grid.ColumnDefinitions>
                <StackPanel Orientation="Vertical" Grid.ColumnSpan="2" Grid.Row="1" HorizontalAlignment="Stretch"> …
Run Code Online (Sandbox Code Playgroud)

validation wpf expander mvvm idataerrorinfo

6
推荐指数
1
解决办法
1457
查看次数