我有一個註冊表格,只有幾個字段。這是一個PRISM MVVM
應用程序。如何讓View Model知道成功驗證的表格
領域之一的XAML看起來像這樣(RegisterView.xaml):
<TextBlock>Surname</TextBlock>
<TextBox Validation.ErrorTemplate="{StaticResource validationTemplate}" HorizontalAlignment="Left" Margin="0" Name="Surname" VerticalAlignment="Top" >
<TextBox.Text>
<Binding Path="Surname" UpdateSourceTrigger="LostFocus" >
<Binding.ValidationRules>
<val:Required />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
正如你可以從上面的代碼看,我用需要驗證字段類。 Function的Function Validate()必需然後返回ValidationResult
對象。我還爲輸入的樣式定義了一些觸發器,因此我可以將驗證結果顯示給用戶。
我不知道什麼是如何檢測的視圖模型中的所有輸入驗證的狀態。在ViewModel中,我有SaveUserCanExecute
函數,它應該在所有輸入的驗證狀態下啓用/禁用基本上的註冊表單提交按鈕。
那麼有什麼簡單的方法來實現這個目標?
我可以爲此做一些解決方法,但我認爲不是正確的方法。
現在,我做了一個視圖代碼Submit_Click功能上提交按鈕的Click事件被解僱。
在RegisterView.xaml
<Button Content="Register" HorizontalAlignment="Left" Margin="0" Name="Submit" VerticalAlignment="Top" Command="{x:Static inf:Commands.SaveUser}" Click="Submit_Click" />
我也是在代碼中創建新的公共布爾變量 「formIsValid」 的背後。按下提交按鈕後,我檢查是否所有輸入都沒有驗證錯誤(使用Validation.GetHasError(InputName)
函數)。如果是這樣,我將formIsValid
變量設置爲true,否則將其設置爲false。
在RegisterView.xaml.cs
private void Submit_Click(object sender, RoutedEventArgs e)
{
if (Validation.GetHasError(Firstname) == false && Validation.GetHasError(Surname) == false)
{
registerFormValid = true;
}
else
{
registerFormValid = false;
}
}
然後在視圖模型SaveUserCanExecute
功能如下:
private bool SaveUserCanExecute(string parameter)
{
if (View.registerFormValid == true)
{
return true;
}
return false;
}
但正如我前面提到的,我覺得不it's適當的方式,以及我正在尋找更清晰的方式。
好吧,聽起來不錯,但如何恰當地實現IDataErrorInfo來返回驗證結果?我查了很多IDataErrorInfo的例子,幾乎在他們把公共字符串這個[string propertyName] {驗證函數在這裏}一些驗證函數。但我不想這樣做,因爲我已經使用將驗證函數綁定到xaml元素,而且我不想再調用同一個函數兩次。謝謝。 –
mantonn
如果我調用MessageBox.Show(this.Error);在我的代碼中,那麼它什麼都不顯示,即使消息框沒有顯示。 – mantonn
最後,我使用了IDataErrorInfo,謝謝 – mantonn