如何WPF滑块和文本框双向绑定?

zsohkypk  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(164)

我希望slider值绑定到textboxtextbox绑定到slider值(用户交互)。我现在只是textbox绑定的slider值。我怎样才能得到它?

<TextBox 
Width="70" 
Height="20" 
Grid.Row="1" 
Margin="0 0 80 180" 
x:Name="AO1text"               
Text="{Binding ElementName=AOch1,Path=Value, StringFormat={}{0:F2}}"/>
<Slider 
x:Name="AOch1" 
Maximum="20" 
Minimum="4" 
Value="{Binding ao1value}" 
Width="250" 
BorderThickness="5" 
TickPlacement="BottomRight"
h43kikqp

h43kikqp1#

虽然您可以使用视图模型来实现这一点,但这样做当然不是 * 必需的 *。
你实际上只需要一个双向绑定:

<StackPanel>
    <TextBox Text="{Binding ElementName=AOch1,
                            Path=Value,
                            Mode=TwoWay,
                            StringFormat={}{0:F2},
                            UpdateSourceTrigger=PropertyChanged}"/>
    <Slider x:Name="AOch1" Minimum="4" Maximum="20" />
</StackPanel>

Binding上的赋值UpdateSourceTrigger=PropertyChanged可确保在TextBox的Text更改时立即更新Slider。默认值是仅当TextBox失去焦点时才会发生这种情况,在这里可能更合适。

vzgqcmou

vzgqcmou2#

试试这个

<TextBox Width="120" Text="{Binding ElementName=AOch1, Path=Value, StringFormat={}{0:N0}, UpdateSourceTrigger=PropertyChanged}"/>
<Slider x:Name="AOch1" Maximum="100" Minimum="0" Width="250" />
// Get value from Slider
targetObject.Value = AOch1.Value;

建议的方法是:
1.创建一个具有属性的类,如Value

public class ItemModel 
{ 
    double _Value = 4;

    public double Value
    {
        get => _Value;
        set
        {
            if (value < 4)
                value = 4;

            if (value > 20)
                value = 20;

            if (_Value != value)
            {
                _Value = value;
                // Notify Property Changed
            }
        }
    }
}

// Window1.xaml.cs
ItemModel model = new ItemModel();

// Window1_Loaded
yourGrid.DataContext = model;

1.将ItemModel.Value绑定到TextBox.Text和Slider.Value。

<TextBox Text="{Binding Path=Value, StringFormat={}{0:F2}, UpdateSourceTrigger=PropertyChanged}"/>
<Slider Value="{Binding Path=Value}" Maximum="20" Minimum="4" Width="250" BorderThickness="5" TickPlacement="BottomRight" />

1.这样,在代码部分中,您只需要访问ItemModel.Value。

相关问题