繁体   English   中英

WPF MVVM 在 Datagrid 有任何错误时禁用按钮

[英]WPF MVVM Disable button when Datagrid has any error

我研究了所有提出的问题和答案,但找不到任何解决方案。

我有一个由用户操作然后保存到数据库的 Datagrid。 我有一个保存按钮,如果网格中有错误,我希望它被禁用。 假设当用户在字段中输入一个应该有数字或 null 的字符时,它应该保持禁用状态。

这是我的网格:

<DataGrid x:Name="dataGrid" ItemsSource="{Binding DataList}" SelectedItem="{Binding SelectedData}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False">
     <DataGrid.Columns>
         <DataGridTemplateColumn Header="MustBeNumber">
             <DataGridTemplateColumn.CellTemplate>
                 <DataTemplate>
                     <TextBox Text="{Binding Path=NUMBER_FIELD, UpdateSourceTrigger=PropertyChanged}" >
                 </DataTemplate>
             </DataGridTemplateColumn.CellTemplate>
         </DataGridTemplateColumn>
     </DataGrid.Columns>
 </DataGrid>

我的 model (ViewModel 有这个模型的 ObservableCollection):

public class Data : ObservableObject
{
    private int? _number_field;

    public int? NUMBER_FIELD { get { return _number_field; } set { _number_field = value; OnPropertyChanged("NUMBER_FIELD"); } }
}

我试过这个但没有机会:

<Button Content="Save" Name="btnSave" Command="{Binding SaveCommand}">
     <Button.Style>
         <Style TargetType="Button">
             <Setter Property="IsEnabled" Value="False"/>
             <Style.Triggers>
                 <MultiDataTrigger>
                     <MultiDataTrigger.Conditions>
                         <Condition Binding="{Binding Path=(Validation.HasError), ElementName=dataGrid}" Value="False"/>
                      </MultiDataTrigger.Conditions>
                      <Setter Property="IsEnabled" Value="True"/>
                  </MultiDataTrigger>
             </Style.Triggers>
        </Style>
   </Button.Style>
</Button>

我也尝试这里提到的解决方案。 它工作得很好。 但是,当用户删除有错误的行时,它会丢失轨道。 发生这种情况时,按钮始终保持禁用状态。

感谢您的时间。

由于已经过去了四天,没有人为此发布答案,我认为没有直接和简单的解决方案。

所以我在这里实施解决方案。 每次 model 更改时,我只是设置了一个重置错误计数的功能。

这有点草率,但解决了问题。

以下是那些想知道的人的代码:

private void OnErrorEvent(object sender, RoutedEventArgs e)
{
    var validationEventArgs = e as ValidationErrorEventArgs;
    if (validationEventArgs.Action == ValidationErrorEventAction.Added)
    {
        errorCount++;
    }
    if (validationEventArgs.Action == ValidationErrorEventAction.Removed)
    {
        errorCount--;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM