讓我通過說我目前在學習WPF和MVVM模式,所以我的問題可能會自我回答更有經驗的開發人員。如何在WPF + MVVM中正確提供用戶反饋? (登錄表單)
我擁有的是一個簡單的登錄表單與文本框的名稱和密碼PasswordBox。名稱框綁定到模型,而密碼框作爲整個對象發送給命令(因爲您無法綁定到其文本屬性)。然後是一個執行登錄命令的按鈕。現在,當登錄工作正常,但我的問題是如何發送命令失敗的返回反饋,而不會破壞mvvm模式。例如,將字段的邊框顏色更改爲紅色。
我最初的直覺是擁有模型的屬性,我會在失敗時改變它。但是我想學習正確的方法來做到這一點,而不是自己破解一個解決方案(擊敗整個事情的目的)。
獎金問題: - 你可以綁定一個屬性到一個語句 - 例如String.isNullOrEmpty(model.name)? - 我應該完全放棄MVVM模式來進行這樣一個簡單的操作嗎(儘管項目的其餘部分仍將使用它)> - 什麼是學習WPF和MVVM的好資源?
代碼的形式波紋管:
<Controls:MetroWindow x:Class="Interface_WPF.View.LoginWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
Title="Enter" Height="140" Width="285" WindowStartupLocation="CenterScreen" WindowStyle="None" AllowsTransparency="True" ResizeMode="NoResize">
<StackPanel>
<Grid FocusManager.FocusedElement="{Binding ElementName=NameBox}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="200" />
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Content="Name:"/>
<Label Grid.Row="1" Grid.Column="0" Content="Password:"/>
<TextBox Grid.Column="1" Grid.Row="0" Margin="3"
Name="NameBox" Text="{Binding Login.Name, UpdateSourceTrigger=PropertyChanged}"/>
<PasswordBox Grid.Column="1" Grid.Row="1" Margin="3"
Name="PasswordBox"/>
</Grid>
<Button Command="{Binding LoginCheck}"
CommandParameter="{Binding ElementName=PasswordBox}"
Style="{DynamicResource SquareButtonStyle}" IsDefault="True" Width="100" HorizontalAlignment="Right" Margin="0,8,7.8,8" Content="Enter"/>
</StackPanel>
「你可以綁定一個屬性到一個語句 - 例如String.isNullOrEmpty(model.name)」?不,但您可以編寫[DataTrigger](https://msdn.microsoft.com/en-us/library/system.windows.datatrigger(v = vs.110).aspx)。你可能在[打破MVVM的密碼]的右邊線(http://stackoverflow.com/a/1493330/424129)。我可能會給viewmodel一個'String LoginError'屬性,並使用XAML樣式,以便當該屬性不爲空時,它將以紅色文本出現在Label中。 –
有關反饋,請搜索「wpf驗證」。既然你沒有綁定到一個屬性,你可能會想實現'IDataErrorInfo'。您也可以使用您建議的方法。您無法綁定到方法,但您可以使用驗證來調用方法並根據結果設置驗證狀態,或者在依賴屬性發生更改時展示重新評估的屬性,調用某個方法。你問的問題非常廣泛,並沒有提出任何可以解決的具體編程問題。如果你想要一個好的答案,請縮小這個問題。 –
@PeterDuniho對此事的模糊理解會導致模糊的問題。我的錯。順便說一下,你的回答給了我一個想法,所以謝謝你:) –