Databind在文本框中输入了代码后面的变量

时间:2015-01-28 17:05:58

标签: c# wpf data-binding textbox

我有一个弹出窗口,其中包含一个允许用户输入数字的文本框,然后单击关闭窗口的按钮。如何将用户输入的内容绑定到后面代码中的双变量?

例如,在我的弹出窗口中,我有:

<TextBox Text="{Binding ...., ElementName ....}" Margin="3" />

<Button Content="close" Click="Close_Popup" HorizontalAlignment="Center" />

我想将在该文本框中输入的内容绑定到名为“double example;”的变量中在后面的代码中。

这是正确的方法吗?或者,当我关闭窗口时变量会变回null吗?

int anInteger;
anInteger = Convert.ToInt32(textBox1.Text);

这是弹出窗口的我的xaml:

    x:Name="this"
    Title="Scale"
    WindowStartupLocation="CenterOwner"
    ResizeMode="NoResize">
 <StackPanel Orientation="Vertical">
    <TextBlock Text="Enter the distance between these two points in meters:" Margin="3"/>
    <TextBox Text="{Binding userInput.get, ElementName=this}" x:Name="scaleText_Box" Margin="3"/>
    <Button Content="Done" Click="closeScale_Window" Width="100" Margin="10"/>
 </StackPanel>

这是弹出窗口背后的代码:

public partial class ScaleInputWindow : Window
{
    public ScaleInputWindow()
    {
        InitializeComponent();
    }

    public double userInput { get; set; }

    private void closeScale_Window(object sender, RoutedEventArgs e)
    {
        this.DialogResult = true;
    }
}

这是我的主窗口代码中的代码,userInput是一个在开头声明的双精度。

ScaleInputWindow scaleInput = new ScaleInputWindow();
if (scaleInput.ShowDialog() == true)
{
    userInput = scaleInput.Input;
}

3 个答案:

答案 0 :(得分:1)

根据您的代码anInteger,只要您关闭窗口,它就会为0

您可以在项目的单独类中声明静态变量,并在项目中的任何位置访问它。

 public class Popvalue
 {
    public static int anInteger = 0;
 }

在弹出窗口中为其指定值。

  Popvalue.anInteger = Convert.ToInt32(textBox1.Text);

答案 1 :(得分:1)

我建议使用ShowDialog方法显示弹出窗口。

在弹出窗口代码中,创建一个包含该值的属性。 (您可以将其绑定到TextBox.Text属性)

public int anInteger {get; set;}

然后当用户关闭窗口(或单击确定按钮)时,设置DialogResult属性(可用于所有窗口)

private void btnDialogOk_Click(object sender, RoutedEventArgs e)
{
   this.DialogResult = true;
}

请注意,设置DialogResult会自动关闭弹出窗口。

使用您的窗口并获得结果......

MyPopupWindow popup = new MyPopupWindow ();

if(popup.ShowDialog() == true)
    enteredNumber = popup.anInteger;

答案 2 :(得分:1)

您不包含获取

<TextBox Text="{Binding ElementName=this, Path=userInput}" x:Name="scaleText_Box" Margin="3"/>

你也可以设置DataContext然后没有ElementName =这个 DataContext更常见