簡體   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