将公式绑定到TextBox

时间:2014-08-14 07:40:29

标签: wpf vb.net data-binding

我正在做一个需要使用页数计算书籍厚度的小程序。

请注意,我对编程几乎全新。这是我第一次访问该网站。

这是XAML。

<StackPanel VerticalAlignment="Center" Margin="25 5 0 10">
    <Slider Maximum="800" TickPlacement="BottomRight" TickFrequency="1" 
           IsSnapToTickEnabled="True" DockPanel.Dock="Right" x:Name="slNumPages" 
           Margin="0" LargeChange="16" SmallChange="2" Value="200" Minimum="16" 
           BorderThickness="0" />

    <WrapPanel>
        <TextBox Text="{Binding ElementName=slNumPages, Path=Value, 
                UpdateSourceTrigger=PropertyChanged}" Width="40" />
        <TextBlock Text="Approx. thickness: " />
        <TextBlock x:Name="tbApproxThickness" Text="..."/>
    </WrapPanel>

如何将TextBlock tbApproxThickness绑定到滑块slNumPages的值乘以常量0.0252的公式?

2 个答案:

答案 0 :(得分:0)

你去吧

<StackPanel VerticalAlignment="Center"
            Margin="25 5 0 10"
            xmlns:l="clr-namespace:CSharpWPF">
    <StackPanel.Resources>
        <l:ApproxThicknessConverter x:Key="ApproxThicknessConverter" />
    </StackPanel.Resources>
    <Slider Maximum="800"
            TickPlacement="BottomRight"
            TickFrequency="1"
            IsSnapToTickEnabled="True"
            DockPanel.Dock="Right"
            x:Name="slNumPages"
            Margin="0"
            LargeChange="16"
            SmallChange="2"
            Value="200"
            Minimum="16"
            BorderThickness="0" />

    <WrapPanel>
        <TextBox Text="{Binding ElementName=slNumPages, Path=Value, 
            UpdateSourceTrigger=PropertyChanged}"
                 Width="40" />
        <TextBlock Text="Approx. thickness: " />
        <TextBlock x:Name="tbApproxThickness"
                   Text="{Binding Value,ElementName=slNumPages,Converter={StaticResource ApproxThicknessConverter}}" />
    </WrapPanel>
</StackPanel>

以下是同一

的更改
<l:ApproxThicknessConverter x:Key="ApproxThicknessConverter" />

Text="{Binding Value,ElementName=slNumPages,Converter={StaticResource ApproxThicknessConverter}}"

转换器类

namespace CSharpWPF
{
    class ApproxThicknessConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (double)value * 0.0252;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

答案 1 :(得分:0)

您可能需要参考MSDN上的Data Binding Overview页面来了解此答案。一个简单的解决方案是将double属性绑定到Slider.Value属性,然后在执行计算的公式属性中引用此属性。尝试这样的事情:

public double SliderValue
{
    get { return sliderValue; }
    set 
    { 
        sliderValue = value; 
        NotifyPropertyChanged("SliderValue"); // Implement INotifyPropertyChanged
        FormulaValue = sliderValue * 0.0252;
    }
}

public double FormulaValue { get; set; } // Implement INotifyPropertyChanged

...

<Slider Maximum="800" TickPlacement="BottomRight" TickFrequency="1" 
       IsSnapToTickEnabled="True" DockPanel.Dock="Right" x:Name="slNumPages" 
       Margin="0" LargeChange="16" SmallChange="2" Value="{Binding SliderValue}" 
       Minimum="16" BorderThickness="0" />

<WrapPanel>
    <TextBox Text="{Binding ElementName=slNumPages, Path=Value, 
            UpdateSourceTrigger=PropertyChanged}" Width="40" />
    <TextBlock Text="Approx. thickness: " />
    <TextBlock x:Name="tbApproxThickness" Text="{Binding FormulaValue}" />
</WrapPanel>

请注意,您需要在这些属性上实施INotifyPropertyChanged Interface才能使其正常运行。您还需要正确设置DataContext的{​​{1}}。完成此操作后,每次移动Window时,该属性都会自动更新Slider