wpf devexpress 绑定数据编辑器

定义视图模型

打开前一个项目

打开RegistrationViewModel.cs文件添加如下属性到RegistrationViewModel类

cs 复制代码
[POCOViewModel]
public class RegistrationViewModel {
    public static RegistrationViewModel Create() {
        return ViewModelSource.Create(() => new RegistrationViewModel());
    }
    protected RegistrationViewModel() {
        if(this.IsInDesignMode())
            InitializeInDesignMode();
        else InitializeInRuntime();
    }
    void InitializeInDesignMode() {
        FirstName = "John";
        LastName = "Smith";
        Email = "John.Smith@JohnSmithMail.com";
        Password = "Password";
        ConfirmPassword = "Password";
        Birthday = new DateTime(1980, 1, 1);
    }
    void InitializeInRuntime() {
        Birthday = null;
    }

    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public virtual string Email { get; set; }
    public virtual string Password { get; set; }
    public virtual string ConfirmPassword { get; set; }
    public virtual DateTime? Birthday { get; set; }
}

从RegistrationViewModel是一个POCO类,所有定义属性都是可绑定的

InitializeInRuntime方法初始化生日属性。DateTime结构是一个值类型,因此Birthlday字段可以使用可空DateTime。和一个不可空类型,Birthday字段可能初始化在特定的值,没有被推荐

注册数据

添加AddEmployee方法到视图模型

cs 复制代码
[POCOViewModel]
public class RegistrationViewModel {
    ...
    public void AddEmployee() {
        EmployeesModelHelper.AddNewEmployee(FirstName, LastName, Email, Password, Birthday.Value);
    }
}

POCO机制自动生成一个命令对于方法。生成的命令名字如下方法匹配MethodNameCommand。设置Command属性注册按钮:

XML 复制代码
<dxlc:LayoutControl Orientation="Vertical" ItemStyle="{StaticResource itemStyle}" ItemSpace="10">
    ...
    <Button Content="Register" HorizontalAlignment="Center" VerticalAlignment="Bottom" Width="80" 
            Command="{Binding AddEmployeeCommand}" />
</dxlc:LayoutControl>

绑定编辑器

重新生成项目

选择First Name TextEdit元素布局内容调用Quick Actions。点击重新排列按钮到EditValue右侧属性选择Create Data Binding

在调用对话框,启动Custom选项输入"FirstName"

绑定创建,FirstName编辑器显示测试数据在vs设计器

绑定余下的编辑器到它们的对应的属性和注册按钮到AddEmployee命令。XAML如下显示结果

XML 复制代码
<dxlc:LayoutControl Orientation="Vertical" ItemStyle="{StaticResource itemStyle}" ItemSpace="10">
    <dxlc:LayoutGroup ItemSpace="10">
        <dxlc:LayoutItem Label="Name">
            <dxe:TextEdit EditValue="{Binding FirstName}" />
        </dxlc:LayoutItem>
        <dxe:TextEdit VerticalAlignment="Bottom" EditValue="{Binding LastName}" />
    </dxlc:LayoutGroup>
    <dxlc:LayoutItem Label="Email">
        <dxe:TextEdit EditValue="{Binding Email}" />
    </dxlc:LayoutItem>
    <dxlc:LayoutItem Label="Create a password">
        <dxe:PasswordBoxEdit EditValue="{Binding Password}" />
    </dxlc:LayoutItem>
    <dxlc:LayoutItem Label="Confirm your password">
        <dxe:PasswordBoxEdit EditValue="{Binding ConfirmPassword}" />
    </dxlc:LayoutItem>
    <dxlc:LayoutItem Label="Birthday">
        <dxe:DateEdit EditValue="{Binding Birthday}" />
    </dxlc:LayoutItem>
    <Button Content="Register" HorizontalAlignment="Center" VerticalAlignment="Bottom" Width="80" 
            Command="{Binding AddEmployeeCommand}" />
</dxlc:LayoutControl>

编辑器不显示测试数据在运行时

相关推荐
wuminyu12 小时前
JVM规范学习总结:解释器与JIT编译器如何处理JVM字节码
java·linux·c语言·jvm·c++
txxzjmzlh13 小时前
SpringBoot 配置⽂件
java·spring boot·spring
Wang's Blog13 小时前
Java 项目实战: 交友项目 - 搜索附近的功能概述和分析
java·开发语言·交友
骑着蜗牛撵大象32713 小时前
大模型 Agent 的沙箱护栏:gVisor 隔离、出口白名单与审计闭环
java·开发语言·jvm·安全·agent沙箱·gvisor·microvm
IMPYLH13 小时前
Linux 的时间为什么会被拨回去
linux·运维·服务器
独泪了无痕13 小时前
Hutool之LocalDateTimeUtil:让时间间隔操作如虎添翼
java
2601_9632827714 小时前
寒地窄带通信工程实践:黑龙江哈尔滨对讲机选型、组网与合规运维总结
运维·服务器·网络
三无少女指南15 小时前
从这里开始:Java 后端与 AI 工程的三条阅读路线
java·学习路线·ai工程
香蕉大香蕉(06敬畏市场)15 小时前
MySQL 单点详解(07)
java·数据库·mysql·ai·博客·八股
nice_lcj52015 小时前
深入理解 Java 反射:从 Class 对象到方法调用(含性能实测 + 迷你 IOC 实战 + 面试考点)
java·开发语言·后端·面试