Prism框架整理---->第三篇:属性绑定与属性验证

本节我们来整理一下属性绑定的通知以及错误验证,我们通过

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

来通知后台属性,界面发生了改变,通过

this.SetProperty(ref m_TextBlockInfo, value, "TextBlockInfo");

来通知界面,后台属性发生了改变

<Window x:Class="PrismDemo.XCViews.XCFirstUC"
        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:PrismDemo.ViewModels"
        mc:Ignorable="d"
        Title="FirstUC" Height="450" Width="800">
    <Window.Resources>
        <ControlTemplate TargetType="{x:Type TextBox}" x:Key="ct">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="auto"/>
                </Grid.RowDefinitions>
                <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" 
                Background="{TemplateBinding Background}" SnapsToDevicePixels="True"
                CornerRadius="5">
                    <ScrollViewer x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"
                          VerticalContentAlignment="Center" Margin="3,5" BorderThickness="0"/>
                </Border>

                <TextBlock Grid.Row="1" Text="{Binding (Validation.Errors)[0].ErrorContent,RelativeSource={RelativeSource AncestorType=TextBox,Mode=FindAncestor}}" 
                   Foreground="Red" Margin="10,5"
                   Name="txtError"/>

            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="Validation.HasError" Value="True">
                    <Setter Property="Visibility" Value="Visible" TargetName="txtError"/>
                    <Setter Property="ToolTip" 
                    Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Window.Resources>
    <Grid>
        <StackPanel Margin="30">
            <TextBox Text="{Binding TextBlockInfo,UpdateSourceTrigger=PropertyChanged}" FontSize="30" Template="{StaticResource ct}"/>
            <TextBlock Text="{Binding TextBlockInfo}" FontSize="30"/>
        </StackPanel>
    </Grid>
</Window>
using Prism.Mvvm;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PrismDemo.XCViewModels
{
    public class XCFirstUCVM : BindableBase, INotifyDataErrorInfo
    {
        private string m_TextBlockInfo = "";
        public string TextBlockInfo
        { 
            get { return m_TextBlockInfo; }
            set
            {
                this.SetProperty(ref m_TextBlockInfo, value, "TextBlockInfo");

                // 基于ErrorsContainer的数据校验方式
                if (value == "1231")
                {
                    // 异常消息
                    ErrorsContainer.SetErrors("TextBlockInfo", new string[] { "输入值无效1231231" });
                }
                else
                {
                    ErrorsContainer.ClearErrors("TextBlockInfo");
                }
            }
        }


        private ErrorsContainer<string> errorsContainer;

        public ErrorsContainer<string> ErrorsContainer
        {
            get
            {
                if (errorsContainer == null)
                    errorsContainer = new ErrorsContainer<string>((propName) =>
                    {
                        // 异常信息的处理
                        ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propName));
                    });

                return errorsContainer;
            }
            set { errorsContainer = value; }
        }


        public XCFirstUCVM()
        {
            m_TextBlockInfo = "123";
        }


        /// <summary>
        ///  INotifyDataErrorInfo 接口方法
        /// </summary>

        public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
        public bool HasErrors => ErrorsContainer.HasErrors;
        public IEnumerable GetErrors(string propertyName) => ErrorsContainer.GetErrors(propertyName);
    }
}

效果如下:

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: GraphPad Prism 9.5 是一款专业的统计与绘图软件,可从各种实验数据中生成高质量的图表和分析结果。这款软件适用于多种研究领域,如生物学、医学、化学、物理学、社会科学等。 GraphPad Prism 9.5 有着简洁明了的操作界面,易于上手。它具有多种分析工具和图表类型,包括柱状图、散点图、趋势图、等分图、箱线图等。用户可以根据实验类型选择不同的分析方法,比如t检验、方差分析、回归分析等,从而很方便地评估数据的可靠性和相关性,并检验差异的显著性。 此外,GraphPad Prism 9.5 还提供了充分的数据可视化功能。用户可以随时调整图表风格和样式,以使其更加清晰、直观、吸引人,并分享给同事、客户或出版社,以便更好地展示实验结果和相关结论。 总的来说,GraphPad Prism 9.5 是一款功能齐全、易于操作的统计分析软件,既适合专业人士处理大量数据,又适合初学者进行简单的实验分析。 ### 回答2: GraphPad Prism 9.5是一款用于科学数据分析和制图的软件,具有图形化界面和用户友好的操作界面。它被广泛应用于医学、生物学、化学、生命科学和社会科学等领域。 GraphPad Prism 9.5提供了多种统计分析方法,包括t检验、方差分析、卡方检验、线性回归、非线性回归、生存分析和逐步多元回归等。这些方法可以帮助用户对数据进行准确的统计分析,从而得出科学结论。 除了统计分析,GraphPad Prism 9.5还提供了各种制图工具,例如柱状图、饼状图、折线图、散点图、密度图、箱线图和热力图等。这些图表具有美观的外观和易于阅读的格式,可以展示数据的趋势和关系。 另外,GraphPad Prism 9.5也支持将制作的图表导出为多种格式,包括PDF、PNG、JPEG和EPS等。用户可以根据需要导出图表,并在论文、演示文稿和海报等科学出版物中使用。 总之,GraphPad Prism 9.5是一款出色的科学数据分析和图表制作软件,其强大的统计分析功能和精美的图表制作功能可以帮助科学家们更有效地解释和传达其研究成果,提高科研工作的效率和质量。 ### 回答3: GraphPad Prism 9.5是数据分析和绘图软件中最流行的一种,被用于生物、医学等领域的研究数据分析和图表制作。在其最新的版本中,增加了不少新的功能和改进,例如增加了数据集的结构化和管理功能,增强了安全性和可扩展性,拓展了统计和回归分析工具,提高了绘制图表的速度和效率。此外,Prism 9.5还配备了全新的交互式媒体工具,支持图表的动态展示和在线共享,使用者可以方便地制作出精美的图表和报告,并与其他人分享和交流自己的研究进度和发现。综上所述,GraphPad Prism 9.5是一款非常实用、易用、高效的数据分析与图表制作软件,为生物、医学等研究领域的科学家提供了重要的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自己的九又四分之三站台

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值