c# - 如何更改我的按钮单击,以便在我的 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="" 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";
}
}
}
解决方案
推荐阅读
- bash - Linux中是否有任何方法可以显示并排多次使用的命令的输出?
- sql - 用于添加列值的 SQL 查询
- admob - AdMob Android 消息传递平台 (UMP) SDK 应用程序崩溃
- android - 如何在recyclerview中显示嵌套的子数据
- javascript - 无法在反应应用程序中导入多个 CSS 文件
- css - 按钮或超链接标签的“内联块”之间的奇怪差距
- java - 如何在 Java Swing 中画出半短音符(全音符)?
- c++ - cpp - 在不使用 void 返回类型(递归)的情况下实现合并排序功能
- linux - Apache 站点配置加载资源失败
- linux - 使用 auditd 检测 pg_dump 调用