Acceda al contenido de TextBox desde MainWindow en un control de usuario

Estoy realmente luchando aquí siendo un programador novato... Por cierto, todo esto se ha hecho en WPF

Tengo tres cuadros de texto en mi MainWindow.

El método que devuelve los valores a estos cuadros de texto se ha hecho público (y está dentro de MainWindow). A continuación se muestra uno de los tres cuadros de texto.

 public float GetLEL()
    {
        bool LEL = false;
        float parsedLELValue = 0;
        LEL = float.TryParse(LEL_TextBox.Text, out parsedLELValue);
        return parsedLELValue;
    }

¿Cómo puedo devolver este valor a mi clase de control de usuario tal como está, incluso si cambia?

He intentado todo tipo, como crear una instancia dentro de Usercontrol (que no ha funcionado) -

Application app = new Application();


private float GetNewLEL()
        {
            float parsedNewLELValue = 0.00F;
            bool NewLEL = false;
            if (HolidayPay_CheckBox.IsChecked == false)
            {
                NewLEL = float.TryParse(app.GetHPR().ToString, out parsedNewLELValue);
            }

            else if (HolidayPay_CheckBox.IsChecked == true)
            {
                parsedNewLELValue = 0.00F;
            }

            return parsedNewLELValue;

        }

Sin embargo, la instancia en Usercontrol no encuentra el método GetLEL() dentro de MainWindow. Puede ayudarme alguien, por favor. Alguien más ha sugerido Get and Set, pero no estoy seguro de cómo hacerlo.

preguntado el 28 de agosto de 12 a las 14:08

"¿Cómo puedo devolver este valor a mi clase de control de usuario tal como está, incluso si cambia?" : ¿puede aclarar lo que quiere lograr exactamente? ¿Qué quiere decir con "mi clase de control de usuario"? Básicamente, va en la dirección equivocada, para recuperar el valor de su TextBox, debe usar DataBinding: msdn.microsoft.com/en-us/library/ms752347.aspx -

Mi control de usuario hace algunos cálculos basados ​​en los valores de estos cuadros de texto que se encuentran en la ventana principal. Los valores de los cuadros de texto pueden ser cambiados por el usuario, por lo tanto, incluso si se han cambiado, deben ser los que se utilizarán en el control de usuario. Enlace de datos, ¿cómo puedo lograr esto? la información es demasiado compleja para mí, ¿hay alguna manera más fácil? -

"por lo tanto, incluso si se han cambiado, deben ser los que se utilizarán en el control de usuario". ¿Puedes explicar una vez más? Y sí, hay mucha información para procesar, pero en la práctica no es tan difícil y es el camino a seguir si quieres una aplicación bien diseñada. Intente buscar en Google "enlace de datos simple wpf", por ejemplo. stackoverflow.com/questions/1725554/… -

Correcto, intentaré explicarlo, en un momento estoy configurando los valores de estos cuadros en 0.00 en función de una casilla de verificación (en el control de usuario, sin embargo, cuando la casilla de verificación no está marcada, quiero que vuelva a los valores del cuadro de texto, pero no lo hace, se queda en cero.-

Definitivamente tienes que DataBind;) -

1 Respuestas

Traté de reproducir lo que entendí que quieres lograr; Si tiene alguna pregunta sobre este código, con gusto le responderé.

MainWindow.xaml:

<Window x:Class="WpfApplication16.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel>
            <CheckBox IsChecked="{Binding MySuperCheckBoxIsChecked}" />

            <TextBox Text="{Binding MySuperFloatValue}" />

            <Button Click="Button_Click">Click me !</Button>

            <TextBlock x:Name="MySuperTextBlock"/>
        </StackPanel>
    </Grid>
</Window>

MainWindows.xaml.cs:

using System.Windows;

namespace WpfApplication16
{
    public partial class MainWindow : Window
    {
        private MySuperDataContextClass _mySuperDataContextClass = 
                                           new MySuperDataContextClass();

        public MainWindow()
        {
            InitializeComponent();

            this.DataContext =_mySuperDataContextClass;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (_mySuperDataContextClass.MySuperCheckBoxIsChecked)
            {
                MySuperTextBlock.Text = 
                   _mySuperDataContextClass.MySuperFloatValue.ToString();
            }
            else
            {
                MySuperTextBlock.Text = 0.0f.ToString();
            }
        }
    }
}

MySuperDataContextClass.cs:

using System.ComponentModel;

namespace WpfApplication16
{
    public class MySuperDataContextClass : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private bool _mySuperCheckBoxIsChecked;
        private float _mySuperFloatValue;

        public bool MySuperCheckBoxIsChecked
        {
            get { return _mySuperCheckBoxIsChecked; }

            set 
            {
                _mySuperCheckBoxIsChecked = value;

                if (this.PropertyChanged != null)
                {
                    this.PropertyChanged(this,
                     new PropertyChangedEventArgs("MySuperCheckBoxIsChecked"));
                }
            }
        }

        public float MySuperFloatValue
        {
            get { return _mySuperFloatValue; }

            set 
            { 
                _mySuperFloatValue = value;

                if (this.PropertyChanged != null)
                {
                    this.PropertyChanged(this,
                     new PropertyChangedEventArgs("MySuperFloatValue"));
                }
            }
        }
    }
}

Respondido 28 ago 12, 15:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.