首页 > 解决方案 > 如何更改我的按钮单击,以便在我的 TextBox 不再为空时始终自动执行?

问题描述

所以我有一个 DataGrid,我在其中使用 MVVM 将我的数据加载到 DataGrid 中。现在我的代码看起来像这样,每当我单击它并且我的 TextBox 不为空时,我的按钮都会更改其内容。但是,我希望它在检测到我的 textBox 不为空时自动更改,因为内容会自动更改,并且一旦 TextBox 为空,它就会返回到以前的内容。为此,这是我的 xaml 代码:

<StackPanel>
    <DataGrid HorizontalGridLinesBrush="Gray" VerticalGridLinesBrush="Gray"  ItemsSource="{Binding Persons}" AutoGenerateColumns="False" Height="309"  Margin="110,76,58,0" x:Name="gridd" >
        <DataGrid.Resources>

            <TextBlock Text="&#xE71C;" x:Key="DataGridSelectAllButtonStyle.Content"/>
            <Style x:Key="{ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}"
                TargetType="{x:Type Button}">
                <Setter Property="Background" Value="Gray"/>
                <Setter Property="BorderBrush" Value="White"/>
                <Setter Property="BorderThickness" Value="0 0 1 0"/>
                <EventSetter Event="Click" Handler="ClearButton_Click"/>
                <Setter Property="Content">
                    <Setter.Value>
                        <StackPanel Background="Gray" Height="40" Width="11">
                            <Separator Background="White" Margin="0,17,-1,0"/>
                            <TextBlock Background="{x:Null}" HorizontalAlignment="Center" Height="13"  Margin="0 5 0 0"
                        FontFamily="Segoe MDL2 Assets" FontWeight="Light" FontSize="7"
                        Text="{Binding Text, Source={StaticResource DataGridSelectAllButtonStyle.Content}}">
                            </TextBlock>
                        </StackPanel>
                    </Setter.Value>
                </Setter>
            </Style>

            <Style TargetType="{x:Type DataGridColumnHeader}">
                <Setter Property="Background" Value="Gray"/>
                <Setter Property="Foreground" Value="White"/>
                <Setter Property="BorderBrush" Value="White"/>
                <Setter Property="BorderThickness" Value="0,0,1,0" />
            </Style>

            <Style TargetType="{x:Type DataGridCell}">

            </Style>

            <Style TargetType="{x:Type DataGridRowHeader}">
                <Setter Property="Width" Value="15"/>
                <Setter Property="Height" Value="20"/>
                <Setter Property="Background" Value="White"/>
                <Setter Property="BorderBrush" Value="Gray"/>
                <Setter Property="BorderThickness" Value="1"/>
            </Style>
        </DataGrid.Resources>

        <DataGrid.Columns>

            <DataGridTextColumn Width="*" SortMemberPath="Id" Binding="{Binding Id}" CanUserResize="False" IsReadOnly="True">
                <DataGridTextColumn.Header>
                    <StackPanel>
                        <TextBlock Text="Id" Margin="3 0 0 0" Width="148" Height="17"/>
                        <Separator Background="White" Width="125" />
                        <TextBox x:Name="IDSearcBox" Width="113" Height="19" Margin="0 0 0 2" 
                                 Text="{Binding DataContext.QueryforID, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, UpdateSourceTrigger=PropertyChanged}" />
                    </StackPanel>
                </DataGridTextColumn.Header>
            </DataGridTextColumn>

            <DataGridTextColumn Width="*" SortMemberPath="Id" Binding="{Binding Name}" CanUserResize="False" IsReadOnly="True">
                <DataGridTextColumn.Header>
                    <StackPanel>
                        <TextBlock Text="Name" Margin="3 0 0 0" Width="148" Height="17"/>
                        <Separator  Background="White" Width="125" />
                        <TextBox x:Name="Name" Width="113" Height="19" Margin="0 0 0 2" 
                                 Text="{Binding DataContext.Queryforname, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, UpdateSourceTrigger=PropertyChanged}"/>
                    </StackPanel>
                </DataGridTextColumn.Header>
            </DataGridTextColumn>

            <DataGridTextColumn Width="*" SortMemberPath="Id" Binding="{Binding Country}" CanUserResize="False" IsReadOnly="True">
                <DataGridTextColumn.Header>
                    <StackPanel>
                        <TextBlock Text="Land" Margin="3 0 0 0" Width="148" Height="17"/>
                        <Separator Background="White" Width="125"/>
                        <TextBox x:Name="Birthday" Width="113" Height="19" Margin="0 0 0 2"  
                                 Text="{Binding DataContext.QueryforCountry, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, UpdateSourceTrigger=PropertyChanged}" />
                    </StackPanel>
                </DataGridTextColumn.Header>
            </DataGridTextColumn>


            <DataGridTextColumn Width="*" SortMemberPath="Id" Binding="{Binding Location}" CanUserResize="False" IsReadOnly="True">
                <DataGridTextColumn.Header>
                    <StackPanel>
                        <TextBlock Text="Ort" Margin="3 0 0 0" Width="148" Height="17"/>
                        <Separator Background="White" Width="125" />
                        <TextBox x:Name="Ort" Width="113" Height="19" Margin="0 0 0 2"   
                                Text="{Binding DataContext.QueryforLocation, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, UpdateSourceTrigger=PropertyChanged}"/>
                    </StackPanel>
                </DataGridTextColumn.Header>
            </DataGridTextColumn>


            <DataGridTextColumn SortMemberPath="Id" Binding="{Binding Age}" CanUserResize="False" IsReadOnly="True">
                <DataGridTextColumn.Header>
                    <StackPanel>
                        <TextBlock Text="Alter" Margin="0 0 0 0" Width="115" Height="17"/>
                        <Separator Background="White" Width="125"/>
                        <TextBox x:Name="alter" Width="119" Height="19" Margin="0 0 0 2" 
                                 Text="{Binding DataContext.QueryforAge, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, UpdateSourceTrigger=PropertyChanged}"/>
                    </StackPanel>
                </DataGridTextColumn.Header>
            </DataGridTextColumn>


        </DataGrid.Columns>

    </DataGrid>
</StackPanel>

此外,这是我的 Button Click 事件,如果我的 TextBox为空,则该事件应自动执行:

 private void ClearButton_Click(object sender, RoutedEventArgs e)
    {
        if (!String.IsNullOrEmpty(IDSearcBox.Text))
        {
            if (sender is FrameworkElement element)
            {
                TextBlock textBlock = (TextBlock)element.FindResource("DataGridSelectAllButtonStyle.Content");
                textBlock.Text = textBlock.Text == "\xE711"
                    ? "\xE71C"
                    : "\xE711";
            }
        }
    }

标签: c#wpfxamldatagrid

解决方案


推荐阅读