文本框未更新



我试过搜索,但可能我没有使用正确的术语来搜索。

我有几个正在使用的文本框,当我输入数据时,我看到调试时更新了值,但它们从未更新到表单中。

基本上,我有一个用于视觉效果的窗体,然后我有了一个处理所有活动的类。我已经将类创建为一个资源,并且在文本框中引用该资源。

我真正知道如何处理表单更新的唯一方法是实现对值更改的计算。因此,如果我更新了一个属性,我会从OnPropertyChanged()调用该方法。这产生了问题,因为由于计算重写值,值总是会发生更改。然后我尝试评估新值的变化

public double In1
{
    get{_return _in1;}
    set{
        if (_in1 != value)
        _in1 = value;
        OnPropertyChanged("In1");
    }
}

不管怎样,我的问题是我没有看到值被写入到文本框中。这是我第一次真正使用数据绑定,所以我认为我做的事情不正确(显然)

<ad:DockableContent
    xmlns="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" 
    x:Class="DMC_Robot_Editor.GUI.frmAngleConvertor"
    Title="frmAngleConvertor" Height="259" Width="282">
<ad:DockableContent.Resources>       
    <local:AngleConvertor x:Key="Converter"/>
</ad:DockableContent.Resources>
<Grid >    
        <GroupBox HorizontalAlignment="Stretch" VerticalAlignment="Top">
        <Grid>
 <ComboBox  x:Name="cbInput" HorizontalAlignment="Stretch" VerticalAlignment="Top"     Grid.Column="1" Grid.ColumnSpan="3" Grid.Row="1"  DisplayMemberPath="ValueCartesianString"     SelectedValuePath="ValueCartesianEnum" IsSynchronizedWithCurrentItem="True"      SelectedIndex="{Binding InputItem,Source={StaticResource Converter}}" ItemsSource="{Binding InputConvention, Source={StaticResource Converter}}"  IsReadOnly="True"/>
                    <TextBox x:Name="tbIn1" HorizontalAlignment="Center"     VerticalAlignment="Bottom" Text="{Binding In1, Converter={StaticResource DoubleToStringConverter}, Source={StaticResource Converter}}" Grid.Column="0"     d:LayoutOverrides="GridBox" Grid.Row="2" Width="50" TextAlignment="Center">
                        <TextBox.DataContext>
                            <local:AngleConvertor/>
                        </TextBox.DataContext>                    </Grid>
</ad:DockableContent>
public class AngleConverter()
{
    private double _in1 = 0.0;
    public double In1
    {
        get{_return _in1;}
        set{
            if (_in1 != value)
            _in1 = value;
            OnPropertyChanged("In1");
        }
    }
}

尝试在文本框上应用UpdateSourceTrigger=PropertyChanged

Text="{Binding Path-In1, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource DoubleToStringConverter}, Source={StaticResource Converter}}"  
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

您可以使用模式TwoWayUpdateSourceTrigger=PropertyChanged添加到绑定中

<TextBox Name="tbIn1" 
HorizontalAlignment="Center"     
VerticalAlignment="Bottom" 
Text="{Binding In1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, 
Converter={StaticResource DoubleToStringConverter}, 
Source={StaticResource Converter}}" 
Grid.Column="0"     
d:LayoutOverrides="GridBox" 
Grid.Row="2" 
Width="50" 
TextAlignment="Center"
/> 

您的真实代码应该有这样的东西:

public class AngleConverter : INotifyPropertyChanged

所以我认为这只是你代码中的一个拼写错误。你没有发布转换器代码,你的文本框中的绑定是可以的。文本框默认的UpdateSourceTrigger是lostfocus。所以也许UpdateSourceTrigger=PropertyChanged做了您想要的。

查看绑定
是否调用DoubleToStringConverter
是被叫吗?

Text="{Binding In1, Converter={StaticResource DoubleToStringConverter}, Source={StaticResource Converter}}"

将绑定中的Source移出DockableContent上的DataContext。

DataContext="{Binding RelativeSource={RelativeSource self}}"

尝试无转换器

Text="{Binding In1}"

相关内容

  • 没有找到相关文章

最新更新