[英]Caliburn.Micro MVVM WPF - enable a button when DataGrid has been edited by the user, otherwise disable it
[英]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.