Sau khi thực hiện cài đặt MVVM Light trong ứng dụng Universal Windows App, tôi có cấu trúc sau đây và tôi tự hỏi cách nào để xác thực trong 2017 bằng UWP và mvvmlight thông báo cho người dùng lỗi và có thể đặt lại giá trị hộp văn bản khi cần. Bí quyết duy nhất là Textbox là một phần của UserControl (làm sạch mã xaml không cần thiết để rõ ràng) vì nó sẽ được sử dụng nhiều lần. Ngoài ra tôi đã thêm DataAnnotations và ValidationResult để trình diễn và không cho rằng đây là cách tốt nhất để thực hiện hoặc nó đang hoạt động theo bất kỳ cách nào cho đến nay.Xác nhận Sử dụng Ánh sáng MVVM trong Ứng dụng Windows Universal
Mã này hoạt động tốt như xa như ràng buộc và thêm và loại bỏ các giá trị
ViewModel
using GalaSoft.MvvmLight; using GalaSoft.MvvmLight.Command; using GalaSoft.MvvmLight.Views; using System; using System.ComponentModel.DataAnnotations; public class ValidationTestViewModel : ViewModelBase { private int _age; [Required(ErrorMessage = "Age is required")] [Range(1, 100, ErrorMessage = "Age should be between 1 to 100")] [CustomValidation(typeof(int), "ValidateAge")] public int Age { get { return _age; } set { if ((value > 1) && (value =< 100)) _age= value; } } public static ValidationResult ValidateAge(object value, ValidationContext validationContext) { return null; } }
Xem
<Page x:Class="ValidationTest.Views.ValidationTestPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:ValidationTest.Views" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" DataContext="{Binding ValidationTestPageInstance, Source={StaticResource Locator}}" xmlns:views="using:ValidationTest.Views"> <views:NumberEdit TextInControl="{Binding Age, Mode=TwoWay}" /> </Page>
UserControl
<UserControl x:Class="ValidationTest.Views.Number" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:ValidationTest.Views" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Name="userControl1"> <Grid> <TextBox x:Name="content" Text="{Binding TextInControl, ElementName=userControl1, Mode=TwoWay}"></TextBox> </Grid> </UserControl>
UserControl Mã Đằng sau:
public partial class NumberEdit : UserControl { public string TextInControl { get { return (string)GetValue(TextInControlProperty); } set { SetValue(TextInControlProperty, value); } } public static readonly DependencyProperty TextInControlProperty = DependencyProperty.Register("TextInControl", typeof(string), typeof(NumberEdit), new PropertyMetadata(null)); }
Có bất kỳ thay đổi cần phải được thực hiện trong XAML? Ngoài ra, liên kết PropertyChangedCallback không hoạt động – usefulBee
chỉ là một fyi, cả hai liên kết đều hoạt động với tôi –
@usefulBee Bạn có thể thêm 'DataContext' vào Trang hoặc Điều khiển, đồng thời tôi đã cập nhật mã theo phương thức StringChanged. –