![](/img/trans.png)
[英]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.