用於資料輸入的基本WPF視窗功能
表的內容 介紹使用程式碼的使用者體驗獲取wpfwindowslib歷史 介紹 在大多數程式中,有一些視窗使用者必須輸入一些資料,控制元件應該驗證這些資料。只有輸入了所有必需的資料,使用者才能儲存它。如果他更改了一些資料,但還沒有儲存,那麼當他關閉視窗時,就會收到警告,說他可能會丟失一些資料。如果所有的功能都被自動新增到你所有的視窗中,而不需要你編寫太多的程式,那不是很好嗎? WpfWindowsLib提供了這個功能。本文描述了它的功能以及如何使用它。WpfWindowsLib是為。net Core 3.1及更高版本編寫的。 使用者體驗 這可能不是您所見過的最漂亮的視窗,但這裡的思想是系統地向用戶展示各種控制元件在不同狀態下是如何顯示的。在每一行中,相同的控制元件型別顯示3次。在第一列中,每個控制元件都為空。在第二列中,控制元件也是空的,但是使用者必須在按Save按鈕之前輸入一些資料。在第三列中,控制元件有一些初始資料。 使用者現在至少需要填寫所有必需的欄位。只有這樣,Save按鈕才會啟用。一旦他按下儲存按鈕,它將再次被禁用。如果使用者隨後更改了任何資料,則會再次啟用Save按鈕。已啟用的Save按鈕告訴使用者他已經更改了一些資料。 當用戶在儲存更改之前試圖關閉視窗時,會發生什麼情況? 他會收到一條警告訊息,視窗會向他顯示他已經更改但尚未儲存的資料。然後,他可以決定是關閉視窗並放棄更改,還是繼續資料輸入並儲存更改。 使用的程式碼 您幾乎不需要編寫任何程式碼就可以獲得所有這些功能。WpfWindowsLib庫提供以下控制元件: 知道他們的資料什麼時候改變了知道他們的資料什麼時候改變了(使用者撤銷了他的改變)知道什麼時候一個“必需的”控制元件缺少資料知道什麼時候一個“必需的”控制元件有資料自動找到他們所在的視窗並通知視窗關於每個狀態改變 該視窗必須繼承WpfWindowsLib中的CheckedWindow。 隱藏,複製Code
<wwl:CheckedWindowx:Class="Samples.SampleWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:wwl="clr-namespace:WpfWindowsLib;assembly=WpfWindowsLib"> <StackPanel> <wwl:CheckedTextBoxx:Name="TestCheckedTextBox"MinWidth="100"MaxLength="20"IsRequired="True"/> <Buttonx:Name="SaveButton"Content="_Save"/> </StackPanel> </wwl:CheckedWindow>
CheckedTextBox繼承自TextBox,新增ICheck功能(見下面的解釋)和IsRequired屬性。當該值設定為true時,使用者必須提供一個值(即。, Text.Length>0)在儲存按鈕可用之前: 在XAML,也在後面的程式碼,視窗必須繼承從CheckedWindow: 隱藏,收縮,複製Code
usingSystem.Windows; using WpfWindowsLib; namespace Samples { public partial class SampleWindow: CheckedWindow { public SampleWindow() { InitializeComponent(); //write some code here to display data coming from a database, etc. TestCheckedTextBox.Text = database.Read(...); SaveButton.Click += saveButton_Click; updateSaveButtonIsEnabled(); } private void saveButton_Click(object sender, RoutedEventArgs e) { //write some code here to save the data the user has entered database.Write(..., TestCheckedTextBox.Text); Close(); } private void updateSaveButtonIsEnabled() { SaveButton.IsEnabled = HasICheckChanged && IsAvailable; } protected override void OnICheckChanged() { updateSaveButtonIsEnabled(); } protected override void OnIsAvailableChanged() { updateSaveButtonIsEnabled(); } } }
只有非常少的程式碼需要新增到該視窗: Save按鈕 視窗的外觀沒有任何要求。但最有可能的是,會有一個儲存按鈕。當某些資料發生更改(=HasICheckChanged)並且輸入所有必需的資料(=IsAvailable)時,此按鈕被啟用。 呼叫updateSaveButtonIsEnabled () HasICheckChanged和IsAvailable是CheckedWindow的屬性。如果它們發生變化,CheckedWindow呼叫OnICheckChanged()或OnIsAvailableChanged(),需要覆蓋它們以更新Save按鈕狀態。 封面下面會發生什麼 所使用的控制元件需要提供ICHeck介面的功能。WpfWindowsLib提供了以下控制元件: 複選框combobox datepicker decimaltextbox電子郵件文字框integertextbox phonetextbox文字框 一個不侷限於這些控制元件,但可以繼承任何現有的控制元件和新增一個IChecker,它實現了ICheck介面功能: 隱藏,收縮,複製Code
namespace WpfWindowsLib { public interface ICheck { /// <summary> /// Has the user changed the initial value of the control ? /// </summary> bool HasChanged { get; } /// <summary> /// Needs the user to change the initial value of the control ? /// </summary> bool IsRequired { get; } /// <summary> /// Has the user changed the initial value of the required control ? /// </summary> bool IsAvailable { get; } /// <summary> /// Raised when the user changes the initial value of the control /// or when the user undoes any change and /// enters the initial value again. /// </summary> event Action HasChangedEvent; /// <summary> /// Raised when the user changes the initial value of the required value control /// or when the user undoes /// any change and enters the initial value again. /// </summary> event Action IsAvailableEvent; /// <summary> /// Tells the control to use the present value as initial value. /// </summary> void ResetHasChanged(); /// <summary> /// Changes the background color of the control if its value is now /// different than the initial value /// and isChanged is true. If isChanged is false, the background color /// gets displayed from when the /// control got initialised. /// </summary> /// <paramname="isChanged"></param> void ShowChanged(bool isChanged); } }
在初始化期間,ICheck控制元件搜尋它所在的視窗。如果該視窗繼承自CheckedWindow,它就會註冊到該視窗。在註冊期間,CheckedWindow訂閱控制元件的HasChangedEvent和IsAvailableEvent事件。當用戶在控制元件中更改一些資料並導致HasChanged或IsAvailable的更改時,該控制元件會引發適當的事件,向CheckedWindow發出警報。CheckedWindow查詢所有已註冊的控制元件,以評估其自身的HasICheckChanged或IsAvailable屬性是否需要更改,然後呼叫OnICheckChanged和OnIsAvailableChanged(這給繼承視窗提供了機會)相應地啟用或禁用Save按鈕。當用戶試圖關閉視窗時,CheckedWindow檢查是否有任何控制元件沒有儲存資料。如果是,它將標記這些控制元件,以便使用者可以看到尚未儲存的內容。然後CheckedWindow詢問使用者是否真的想關閉視窗並丟失輸入的資料。 得到WpfWindowsLib 最新版本可以從Github下載:https://github.com/PeterHuberSg/WpfWindowsLib。 下載或克隆一切到你的PC,這給你一個解決方案WpfWindowsLib與以下專案: WpfWindowsLib:(.Dll)引用您的其他解決方案示例:顯示所有WpfWindowsLib控制元件的wpfwindowslibtest WpfWindowsLib單元測試WpfWindowsLib核心應用程式 推薦閱讀 電子郵件地址驗證詳細說明(WpfWindowsLib)國際電話號碼驗證詳細說明(WpfWindowsLib)使用繫結的WPF資料格式化指南 歷史 2020年2月20日:初版 本文轉載於:http://www.diyabc.com/frontweb/news2572.html