Кнопка включения, если в одном из трех текстовых полей на 3 вкладках есть содержимое - PullRequest
0 голосов
/ 17 мая 2019

У меня есть кнопка, которая находится за пределами элемента управления вкладки.Каждая вкладка в TabControl имеет либо текстовое поле для ввода текста вручную, либо средство поиска для поиска чего-либо из базы данных (значение которого также будет записано в метку на вкладках 2 и 3).

Я хочу включить кнопку «Печать», если в текстовом поле есть содержимое или , переменная, которая заполняется из запроса к базе данных на выбранной вкладке, имеет содержимое.

Что будетлучший способ сделать это, учитывая, что кнопка может быть связана только с одним источником?Я подумал о наличии промежуточной переменной, но тогда это также будет связано только с одним элементом.

Есть идеи?Я действительно новичок в привязке данных, и я изо всех сил пытаюсь разобраться в некоторых понятиях.

Не помогает, что серверная часть находится в VB, потому что я портирую числоприложений WinForms для WPF, и я хочу сделать их правильно.

Быстрый XAML:

<Window x:Name="Main1" x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" SizeToContent="Height">
    <Grid>
        <StackPanel >
            <Grid x:Name="Activity" Margin="5,5,5,0" >
                <StackPanel>
                    <TabControl x:Name="Main_Tabs" Background="{x:Null}" BorderBrush="Gainsboro">
                        <TabItem x:Name="T1" Header="H1" >
                            <Grid Margin="5">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="20*"/>
                                    <ColumnDefinition Width="80*"/>
                                </Grid.ColumnDefinitions>

                                <Label Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right">Address:</Label>
                                <TextBox x:Name="Single_Address" 
                                                 Margin="5,3" 
                                                 SpellCheck.IsEnabled="True" 
                                                 IsManipulationEnabled="True" 
                                                 TextWrapping="Wrap"
                                                 AcceptsReturn="True"
                                                 VerticalScrollBarVisibility="Auto"
                                                 Grid.Column="1" Grid.Row="2"
                                                 Language="en-GB" Height="80">
                                </TextBox>
                            </Grid>
                        </TabItem>
                        <TabItem x:Name="T2" Header="H2" >
                            <Grid Grid.ColumnSpan="2" Grid.Row="1" x:Name="Grid_Elucid_Label2">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="20*"/>
                                    <ColumnDefinition Width="80*"/>

                                </Grid.ColumnDefinitions>

                                <Label Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right">Address:</Label>
                                <Label x:Name="Elucid_Address" 
                                                 Margin="5,3" 
                                                 Grid.Column="1" Grid.Row="2" Height="80">
                                </Label>
                            </Grid>

                        </TabItem>
                        <TabItem x:Name="T3" Header="H3">
                            <Grid x:Name="Grid_Sage_Label" Margin="5">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="20*"/>
                                    <ColumnDefinition Width="80*"/>
                                </Grid.ColumnDefinitions>

                                <Label Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right">Address:</Label>
                                <Label x:Name="Sage_Address" Margin="5,3" Grid.Column="1" Grid.Row="2" Height="80">
                                </Label>
                            </Grid>
                        </TabItem>
                    </TabControl>
                </StackPanel>
            </Grid>
            <Button x:Name="Print_Button" Content="Print" Padding="10" Background="{x:Null}" BorderBrush="Gainsboro" />
        </StackPanel>
    </Grid>
</Window>

1 Ответ

1 голос
/ 17 мая 2019

# 1 ВМ с несколькими текстовыми свойствами для оценки

Если у вас всего несколько текстовых свойств и вы используете ВМ, вы можете использовать несколько триггеров.Я написал это вручную, поэтому извините, если синтаксис не соответствует 100%.

<button content="print">
  <button.style>
    <style targettype={x:type button}>
      <style.triggers>
        <multidatatrigger>
          <multidatatrigger.conditions>
            <condition Binding="{Binding VMprop1}" Value="">
            <condition Binding="{Binding VMprop2}" Value="">
            <condition Binding="{Binding VMprop3}" Value="">
          </multidatatrigger.conditions>
          <multidatatrigger.setters>
            <setter property="IsEnabled" value="false"/>
          </multidatatrigger.setters>
        </multidatatrigger>
      </style.triggers>
    </style>
  </button.style>
<button>

2 нет виртуальной машины или много свойств для оценки

привязка к TextChangedвсех TextBox и оцените их состояние, и установите IsEnabled от вашей кнопки (если вы хотите использовать свойство зависимости)

<button x:Name="btn1" content="print" IsEnabled="{Binding CanPrint}"/>
<textbox x:Name="tb1" TextChanged="EvaluateCanPrint"/>
<textbox x:Name="tb2" TextChanged="EvaluateCanPrint"/>
<textbox x:Name="tb3" TextChanged="EvaluateCanPrint"/>
<textbox x:Name="tb4" TextChanged="EvaluateCanPrint"/>
...

private void EvaluateCanPrint() {
  // ViewModel.EvaluateCanPrint();
  ViewModel.CanPrint = 
    !string.isNullOrEmpty(tb1.Text) &&
    !string.isNullOrEmpty(tb2.Text) &&
      ...;
}

// Original answer
//private void EvaluateTextChanged() {
//  if (string.isNullOrEmpty(tb1.Text) &&
//      string.isNullOrEmpty(tb2.Text) &&
//      ...)
//  {
//    btn1.IsEnabled = false;
//  }
//}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...