【问题标题】:Access TextBox Content from MainWindow in a Usercontrol从用户控件中的 MainWindow 访问 TextBox 内容
【发布时间】:2012-08-28 13:27:10
【问题描述】:

作为一个新手程序员,我在这里真的很挣扎......顺便说一句,这一切都在 WPF 中完成

我的 MainWindow 中有三个文本框。

将值返回到这些文本框的方法已公开(并且位于 MainWindow 中)。下面是三个文本框之一。

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

如何将这个值原样返回到我的用户控件类中,即使它发生了变化?

我已经尝试了各种方法,例如在用户控件中创建一个实例(没有成功) -

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;

        }

但是,Usercontrol 中的实例在 MainWindow 中找不到 GetLEL() 方法。有人可以帮忙吗。其他人建议使用 Get 和 Set,但我不确定如何执行此操作。

【问题讨论】:

  • “我怎样才能将这个值原样返回到我的用户控件类中,即使它发生了变化?” :你能澄清一下你想要达到的目标吗? “我的用户控件类”是什么意思?基本上你走错了方向,要检索 TextBox 的值,你应该使用 DataBinding :msdn.microsoft.com/en-us/library/ms752347.aspx
  • 我的用户控件根据主窗口上这些文本框中的值进行一些计算。文本框的值可以由用户更改,因此即使它们已更改,它们也应该是要在用户控件中使用的值。数据绑定,我怎样才能做到这一点?信息对我来说太复杂了,有没有更简单的方法?
  • "因此,即使它们已被更改,它们也应该是在用户控件中使用的"。你能再解释一次吗?是的,有很多信息需要处理,但实际上这并不难,如果你想要一个设计良好的应用程序,这就是要走的路。例如,尝试谷歌搜索“wpf 简单数据绑定”。 stackoverflow.com/questions/1725554/…
  • 对,我会尝试解释一下,在某一时刻,我根据复选框将这些框的值设置为 0.00(但是,在用户控件中,当未选中复选框时,我希望它恢复到文本框的值,但它没有,它保持为零。
  • 你肯定要 DataBind ;)

标签: c# wpf class get set


【解决方案1】:

我试图重现我理解的你想要实现的目标;如果您对此代码有任何疑问,我很乐意回答。

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"));
                }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    相关资源
    最近更新 更多