我已經遍歷整個互聯網,每個論壇,每個博客,隨時隨地。我現在從字面上包含互聯網......除了這最後一件事情;-)。這裏的問題:我有了這樣定義的列一個WPF的DataGrid:WPF - XAML中的參考XAML元素
<tk:DataGridTemplateColumn Header="First name" Width="100" x:Name="colFirstName">
<tk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox x:Name="tbFirstName" Validation.ErrorTemplate="{DynamicResource errorTemplateYourDetailsGrid}">
<TextBox.Text>
<Binding Path="Firstname" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True">
<Binding.ValidationRules>
<val:RequiredValidationRule ErrorMessage="Invalid or missing first name" ValidatesOnTargetUpdated="True"></val:RequiredValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</DataTemplate>
</tk:DataGridTemplateColumn.CellTemplate>
</tk:DataGridTemplateColumn>
正如你可以看到我已經定義了一個叫做errorTemplateYourDetailsGrid一個驗證模板。
頁有繼續按鈕,我想禁用,直到該網格中的所有字段都有效:
<Button x:Name="btnNext" HorizontalAlignment="Right" DockPanel.Dock="Right" Content="Continue" Command="{Binding YourDetailsNextCommand}" >
<Button.Style>
<Style TargetType="Button" BasedOn="{StaticResource BtnContinue}">
<Setter Property="IsEnabled" Value="false" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=tbFirstName, Path=(Validation.HasError)}" Value="false" />
<Condition Binding="{Binding ElementName=tbSurname, Path=(Validation.HasError)}" Value="false" />
...etc
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="true" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
一位同事得到了這樣的事情做工精細用直基於表單的佈局(不使用數據網格)。所以我猜我需要一些語法來引用DataGrid中列中的單元格中的TextBox,以便觸發器觸發。簡單地使用ElementName不起作用。即使在您將文本輸入到這些字段時驗證模板按預期消失,該按鈕仍會保持禁用狀態。
我使用MVVM,所以任何基於代碼的解決方案都不是一個選項。