如何实现TextBox和double值之间的双向绑定?

Ars*_*ray 1 c# data-binding wpf xaml

这是我窗口的代码:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="leartWPF.ControlTestWindow"
    x:Name="Window"
    Title="ControlTestWindow"
    Width="640" Height="480">

    <Grid x:Name="LayoutRoot">
        <TextBlock Height="26" Margin="45,26,241,0" TextWrapping="Wrap" Text="Please, enter an ariphmetical expression to calculate:" VerticalAlignment="Top"/>
        <TextBox Margin="48,72,63,201" TextWrapping="Wrap" Text="{Binding Input, ElementName=Window, FallbackValue=1+1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" TextChanged="TextBox_TextChanged" >
        </TextBox>
        <!--<TextBlock Margin="282,208,266,167" TextWrapping="Wrap" Text="=" FontSize="64"/>-->
        <TextBlock Height="90" Margin="83,0,77,60" TextWrapping="Wrap" VerticalAlignment="Bottom" FontSize="48" Text="{Binding Result, ElementName=Window, Mode=TwoWay}"/>
        <Button Content="=" Height="27" Margin="233,0,263,166" VerticalAlignment="Bottom" FontSize="16"/>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

和班级:

public partial class ControlTestWindow : Window
{
    private string _input;

    public double Result { get; set; }
    private static VsaEngine _engine = VsaEngine.CreateEngine();

    public string Input
    {
        get { return _input; }
        set
        {
            Result = double.Parse(Eval.JScriptEvaluate(value, _engine).ToString());
            _input = value;
        }
    }


    public ControlTestWindow()
    {
        this.InitializeComponent();

        // Insert code required on object creation below this point.
    }

    private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
    }

}
Run Code Online (Sandbox Code Playgroud)

输入被更新,而结果值的变化,但它永远不会显示在相应的TextBlock.

我应该改变什么才能工作?

Bot*_*000 6

TextBlock不会收到有关Result属性更改的通知.您有两种选择:

  1. 将属性实现为DependencyProperty.Visual studio有一个代码片段.键入propdp,你会看到它在intellisense中弹出.
  2. INotifyPropertyChanged在您的Window类上实现并在您的属性中使用它.