Событие управления огнем при срабатывании другого события управления - PullRequest
0 голосов
/ 27 января 2019

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

Я только начал с WPF (MVVM), вот оно:

У меня 3 пользователя Control s на странице, все они одного класса Control.Здесь важно то, что в первом TextBox, когда он потерял фокус, он вызывает метод для вычисления последнего TextBox.Text.

<UserControl x:Class="ASSEMBLY.View.UserControls.EtiquetaDinamicaUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:local="clr-namespace:ASSEMBLY.View.UserControls"
         x:Name="userControl"
         mc:Ignorable="d" 
         Background="Orange" BorderThickness="0"  >

<DockPanel VerticalAlignment="Stretch">
    <Grid Background="green">
        <Grid.ColumnDefinitions >
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="3*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <Viewbox  Grid.Column="0" VerticalAlignment="Stretch" Stretch="Fill" >
            <Label Grid.Column="0" Content="{Binding NombreEtiqueta, ElementName=userControl, Mode=TwoWay}"  HorizontalAlignment="Stretch" BorderThickness="0" Margin="0,0,5,0"
             Background="White" VerticalAlignment="Stretch"  />
        </Viewbox>
        <Viewbox  Grid.Column="1" VerticalAlignment="Stretch" Stretch="Fill" >
            <TextBox Grid.Column="1" MinWidth="30"  BorderThickness="0" Margin="0,0,5,0"
             VerticalContentAlignment="Center" HorizontalContentAlignment="Left" LostFocus="IdChanged" Loaded="IdChanged"
             Text="{Binding IdValue, ElementName=userControl, Mode=TwoWay}"
             />
        </Viewbox>
        <Viewbox  Grid.Column="2" VerticalAlignment="Stretch" Stretch="Fill" >
            <TextBox Grid.Row="0" HorizontalAlignment="Stretch" IsEnabled="True" MinWidth="100"  BorderThickness="0"
                TextAlignment="Left" VerticalAlignment="Stretch" 
               Text="{Binding Path= Descripcion, ElementName=userControl, Mode=TwoWay}">
            </TextBox>
        </Viewbox>

    </Grid>
</DockPanel>

У меня в 3 раза большетот же элемент управления на странице, теперь мне нужно, чтобы, когда UserControl2 запускает LostFocus, также запускает LostFocus usercontrol3.изменение свойства), взаимодействие (безуспешно, пытаясь это).

Это работает, если я устанавливаю свойство TextChanged вместо Lostfocus, потому что все это связано, но я не хочу вычислять второе текстовое поле для каждого символа, введенного пользователем.

Извините замои английские ошибки и спасибо за вашу помощь

отредактировано.Для того, чтобы помочь мне скопировать код за USERCONTROL и MVVM ЧАСТЬ ВИДА.

USERCONTROL КОД за:

    public static readonly DependencyProperty nombreEtiqueta =
    DependencyProperty.Register("NombreEtiqueta", typeof(string), typeof(EtiquetaDinamicaUserControl), new
    PropertyMetadata("DEF"));

    public string NombreEtiqueta
    {
        get { return (string)GetValue(nombreEtiqueta); }
        set { SetValue(nombreEtiqueta, value); }
    }

    public static readonly DependencyProperty SetDescripcionProperty =
        DependencyProperty.Register("Descripcion", typeof(string), typeof(EtiquetaDinamicaUserControl), new
        PropertyMetadata("SIN ASIGNAR"));

    public string Descripcion
    {
        get { return (string)GetValue(SetDescripcionProperty); }
        set { SetValue(SetDescripcionProperty, value); }
    }


    public static DependencyProperty SetIdValueProperty =
        DependencyProperty.Register("IdValue", typeof(string), typeof(EtiquetaDinamicaUserControl), new
        PropertyMetadata("0"));

    public string IdValue
    {
        get { return (string)GetValue(SetIdValueProperty); }
        set { SetValue(SetIdValueProperty, value);
        }
    }




    #region Evento al perder foco IdValue

    private void IdChanged(object sender, RoutedEventArgs e)
    {
        try
        {
            int tmp_id = Convert.ToInt32(((TextBox)e.Source).Text);
            if (tmp_id != 0)
            {
                Descripcion = tmp_id.ToString();
            }

        }
        catch
        {
            Descripcion = "SOLO NUMEROS";
        }

    }
    #endregion

MVVM с точки зрения

class PaginaReservaViewModel:ViewModelBase
{
    Reserva reserva;
    #region Atributos Agencias
    private int codempresa1;
    private int codempresa2;
    private int codempresa3;

    #endregion

    #region Get/Set Agencias
    public int Codempresa1 { get { return codempresa1; } set { codempresa1 = value; } }
    public int Codempresa2
    {
        get { return codempresa2; }
        set
        {
            codempresa2 = value;
            if (codempresa3 == 0)
            {
                codempresa3 = codempresa2;
                OnPropertyChanged("Codempresa3");

            }
        }
    }
    public int Codempresa3 {
        get { return codempresa3; }
        set {
            codempresa3 = value; } }

1 Ответ

0 голосов
/ 28 января 2019

Можете ли вы использовать UpdateSourceTrigger="LostFocus" в привязке текста TextBox в UserControl '?поэтому он не будет срабатывать при каждом вводе ключа.Также, пожалуйста, попробуйте реализовать это все с помощью MVVM (без перехвата событий в Code Behind), тогда у вас будет большой контроль над операцией.

Мое предложение: В ViewModel реализуйте способ изменения других значений при измененииCodempresa1.Вы можете включить метод для их вычисления и вызвать метод в методе set Codempressa1 или включить метод в обработчик PropertyChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...