0

我在 C# Visual Studio 2010 中创建了使用 wpf 命令禁用或启用记录中的按钮的方法,如下所示:

     private void CanSavePageCommandExecute(object sender, CanExecuteRoutedEventArgs e)
    {
        **if (studentsViewSource != null && studentsViewSource.View != null && novelDataSetTableAdapter.Update(novelDataSet.students) > 0)
        {
            e.CanExecute = true;
            //e.Handled = true;
        }
        else
        {
            e.CanExecute = false;
        }
    }**

应该:

  private void CanSavePageCommandExecute(object sender, CanExecuteRoutedEventArgs e)
    {

       e.CanExecute = studentsViewSource != null && this.novelDataSet.HasChanges();
       e.Handled = true;

    }

     private void OnSavePageCommandExecute(object sender, ExecutedRoutedEventArgs e)
    {
        if (novelDataSetTableAdapter.Update(novelDataSet.students) > 0)

            MessageBox.Show("Entries have been updated !", "DATA STATUS");
        else
            MessageBox.Show("Error occurred!", "DATA NOT SAVED");
    }

如果满足所附条件,'CanSavePageCommandExecute' 应该只是禁用 SAVE 按钮。它实际上是这样做的,但它更进一步并将数据保存到数据库中。即使我只是使用 MessageBox.show 进行测试,也不会执行“OnSavePageCommandExecute”命令。如何防止 CanExecute 命令根据对数据集所做的更改将数据保存到仅启用和禁用按钮?

我没有使用 MVVM,但这是来自用户控件的 Xaml 代码的一部分:

  <UserControl.CommandBindings>
    <CommandBinding Command="New" 
            CanExecute="CanNewPageCommandExecute" Executed="OnNewPageCommandExecute" />
    <CommandBinding Command="NavigationCommands.PreviousPage" 
            CanExecute="CanPreviousPageCommandExecute" Executed="OnPreviousPageCommandExecute" />
    <CommandBinding Command="NavigationCommands.NextPage"
            CanExecute="CanNextPageCommandExecute" Executed="OnNextPageCommandExecute" />
    <CommandBinding Command="FirstPage"
            CanExecute="CanPreviousPageCommandExecute" Executed="OnFirstPageCommandExecute" />
    <CommandBinding Command="LastPage"
            CanExecute="CanNextPageCommandExecute" Executed="OnLastPageCommandExecute" />
    <CommandBinding Command="{x:Static local:student.saves}"
            CanExecute="CanSavePageCommandExecute" Executed="OnSavePageCommandExecute" />
    <CommandBinding Command="Delete"
            CanExecute="CanDeletePageCommandExecute" Executed="OnDeletePageCommandExecute" />
</UserControl.CommandBindings>

<Border Width="Auto" Height="Auto" BorderThickness="1" CornerRadius="2">
    <dxlc:LayoutControl Name="layoutControl1" Cursor="Arrow">
        <dxlc:LayoutGroup Orientation="Vertical" Height="303">
            <Border BorderThickness="1" Height="160" Width="160" BorderBrush="Black" Margin="0,0,0,20">
                <Border.Background>
                    <ImageBrush ImageSource="/college12;component/images/prime.jpg" Stretch="Uniform" TileMode="None" />
                </Border.Background>
                <Image Height="150" Name="studypixx" Stretch="UniformToFill" Width="150" UseLayoutRounding="False" DataContext="{StaticResource studentsViewSource}" Source="{Binding Path=studyphoto, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
            </Border>
            <Button Content="Upload Photo" Height="23" HorizontalAlignment="Center" Name="studentphotoupload" VerticalAlignment="Top" Width="116" ToolTip="Inserts photo" Background="#FFEC3B3B" BorderBrush="Black" Cursor="Hand" Click="studentphotoupload_Click" />
            <TextBox Name="photo_text" Width="160" HorizontalAlignment="Left" Height="20" IsHitTestVisible="False" Visibility="Visible" Text="{Binding Path=studyphoto, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" DataContext="{StaticResource studentsViewSource}" />
            <dxlc:LayoutGroup Name="layoutGroup3" View="GroupBox" Width="160" Height="62">
                <Button Content="NEW STUDENT" Height="23" HorizontalAlignment="Center" Name="addstudent" VerticalAlignment="Bottom" Width="93" Command="ApplicationCommands.New" Cursor="Hand" />
            </dxlc:LayoutGroup>
        </dxlc:LayoutGroup>
        <dxlc:LayoutGroup Orientation="Vertical">
            <dxlc:LayoutGroup Name="layoutGroup1" View="GroupBox" Height="238" UseLayoutRounding="True" Orientation="Vertical" Width="450" DragScrolling="False" Header="{Binding Path=surname}" DataContext="{StaticResource studentsViewSource}">
                <dxlc:LayoutGroup>
                    <dxlc:LayoutItem Label="First Name" Name="layoutItem1">
                        <dxe:TextEdit Name="first_name" FontFamily="Consolas" UseLayoutRounding="False" CharacterCasing="Upper" MaskSaveLiteral="True" Mask="[a-zA-Z]+" MaskType="RegEx" EditValue="{Binding Path=firstname, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, UpdateSourceTrigger=LostFocus}" />
                    </dxlc:LayoutItem>
                    <dxlc:LayoutItem Label="Middle Name" Name="layoutItem2">
                        <dxe:TextEdit Name="other_name" FontFamily="Consolas" UseLayoutRounding="False" CharacterCasing="Upper" MaskSaveLiteral="True" Mask="[a-zA-Z]+" MaskType="RegEx" EditValue="{Binding Path=othername, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, UpdateSourceTrigger=PropertyChanged}"/>
                    </dxlc:LayoutItem>
                </dxlc:LayoutGroup>
                <dxlc:LayoutGroup>
                    <dxlc:LayoutItem Label="Surname" Name="layoutItem3">
                        <dxe:TextEdit Name="other_surname" FontFamily="Consolas" UseLayoutRounding="False" CharacterCasing="Upper" MaskSaveLiteral="True" Mask="[a-zA-Z]+" MaskType="RegEx" EditValue="{Binding Path=surname, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, UpdateSourceTrigger=LostFocus}"/>
                    </dxlc:LayoutItem>
                    <dxlc:LayoutItem Label="Email" Name="layoutItem10">
                        <dxe:TextEdit Name="email_address" EditValue="{Binding Path=email, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, UpdateSourceTrigger=PropertyChanged}"/>
                    </dxlc:LayoutItem>
                </dxlc:LayoutGroup>
                <dxlc:LayoutGroup>
                    <dxlc:LayoutItem Label="Birth Date" Name="layoutItem4">
                        <dxe:DateEdit Name="birth_date" Mask="d/MM/yyyy" MaskSaveLiteral="False" MaskType="DateTime" MaskUseAsDisplayFormat="True" UseLayoutRounding="False" FontFamily="Consolas" FontSize="12" EditValue="{Binding Path=birthdate, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, UpdateSourceTrigger=PropertyChanged}"/>
                    </dxlc:LayoutItem>
                    <dxlc:LayoutItem Label="Enrol Date" Name="layoutItem5">
                        <dxe:DateEdit Name="enrol_date" MaskUseAsDisplayFormat="True" MaskType="DateTime" MaskSaveLiteral="False" Mask="d/MM/yyyy" UseLayoutRounding="False" FontFamily="Consolas" FontSize="12" EditValue="{Binding Path=enroldate, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, UpdateSourceTrigger=PropertyChanged}"/>
                    </dxlc:LayoutItem>
                </dxlc:LayoutGroup>
                <dxlc:LayoutGroup>
                    <dxlc:LayoutItem Label="Enrol NO." Name="layoutItem6">
                        <dxe:TextEdit Name="enrol_no" FontFamily="Consolas" FontSize="10" EditValue="{Binding Path=enrolnum, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, UpdateSourceTrigger=PropertyChanged}"/>
                    </dxlc:LayoutItem>
                    <dxlc:LayoutItem Label="Phone NO." Name="layoutItem9">
                        <dxe:TextEdit Name="phone_no" Mask="(\d?\d?\d?\d)\d\d-\d\d-\d\d" MaskType="Regular" MaskUseAsDisplayFormat="True" FontFamily="Consolas" FontSize="10" MaskBeepOnError="False" MaskSaveLiteral="False" AcceptsReturn="True" AcceptsTab="True" EditValue="{Binding Path=phone, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, UpdateSourceTrigger=PropertyChanged}"/>
                    </dxlc:LayoutItem>
                </dxlc:LayoutGroup>
                <dxlc:LayoutGroup>
                    <dxlc:LayoutItem Label="Address" Name="layoutItem7">
                        <dxe:TextEdit Name="address" FontFamily="Consolas" UseLayoutRounding="False" CharacterCasing="Upper" EditValue="{Binding Path=address, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, UpdateSourceTrigger=PropertyChanged}"/>
                    </dxlc:LayoutItem>
                    <dxlc:LayoutItem Label="Town/City" Name="layoutItem8">
                        <dxe:TextEdit Name="town_city" FontFamily="Consolas" UseLayoutRounding="False" CharacterCasing="Upper" Mask="[a-zA-Z]+" MaskType="RegEx" EditValue="{Binding Path=town, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, UpdateSourceTrigger=PropertyChanged}"/>
                    </dxlc:LayoutItem>
                </dxlc:LayoutGroup>
            </dxlc:LayoutGroup>
            <dxlc:LayoutGroup Name="layoutGroup2" View="GroupBox" Width="450">
                <Button Content="FIRST" Height="23" HorizontalAlignment="Left" Name="firststudent" VerticalAlignment="Top" Width="75" Cursor="Hand" Command="NavigationCommands.FirstPage" />
                <Button Content="PREVIOUS" Height="23" HorizontalAlignment="Left" Name="previoustudent" VerticalAlignment="Top" Width="75" Command="NavigationCommands.PreviousPage" ToolTip="Preceding student record" Cursor="Hand" />
                <Button Content="NEXT" Height="23" HorizontalAlignment="Left" Name="nextstudent" VerticalAlignment="Top" Width="75" Command="NavigationCommands.NextPage" ToolTip="Next student record" Cursor="Hand" />
                <Button Content="LAST" Height="23" HorizontalAlignment="Left" Name="laststudent" VerticalAlignment="Top" Width="75" Cursor="Hand" Command="NavigationCommands.LastPage" />
                <Button Content="SAVE" Height="23" HorizontalAlignment="Left" Name="savestudent" VerticalAlignment="Top" Width="75" Cursor="Hand" Command="{x:Static local:student.saves}"/>
            </dxlc:LayoutGroup>
        </dxlc:LayoutGroup>
    </dxlc:LayoutControl>
</Border>
4

0 回答 0