Как это исправить? Двухсторонняя привязка данных не работает - PullRequest
0 голосов
/ 09 октября 2009

Я пытаюсь подключить ползунок и текстовое поле так, чтобы текстовое поле контролировало положение ползунка, а положение ползунка отражалось в текстовом поле. Это базовая двусторонняя привязка между элементами.

Что у меня есть - положение ползунка отображается в текстовом поле. Регулировка ползунка отражается в обновленном значении в текстовом поле. Это работает как исключено.

Проблема - ввод значения в текстовом поле НЕ обновляет положение ползунка.

Я нашел несколько примеров в Интернете и просмотрел их, но не могу понять, что я делаю неправильно. Есть предложения?

Мой код указан ниже.

<Window x:Class="ScrollBarBinding.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="756">
    <Grid Margin="10">
        <Grid.Resources>
            <Style x:Key="txtStyle" TargetType="TextBox">
                <Setter Property="FontSize" Value="15pt"/>
                <Setter Property="HorizontalAlignment" Value="Stretch"/>
                <Setter Property="Margin" Value="10"/>
            </Style>
        </Grid.Resources>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="400"/>
        </Grid.ColumnDefinitions>
        <TextBox Name="txtie" Grid.Column="0" Style="{StaticResource txtStyle}" Text="{Binding ElementName=scrollie, Path=Value, Mode=TwoWay}" />
        <ScrollBar Name="scrollie" Orientation="Horizontal" Grid.Column="1" Minimum="0" Maximum="10" />
    </Grid>
</Window>

Обновление - - -

Я построил это с нуля в Blend3. И теперь это работает. Я добавил UpdateSourceTrigger = PropertyChanged. Я все еще открыт для комментариев или предложений относительно того, является ли это лучшим решением.

<Grid x:Name="LayoutRoot">
   <TextBox HorizontalAlignment="Left"
       Margin="97.293,121.6,0,0"
       VerticalAlignment="Top"
       Width="139.2"
       Height="40.8"
       Text="{Binding Value, ElementName=slider, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
       TextWrapping="Wrap"/>
   <Slider x:Name="slider"
       Margin="97.293,0,194.707,140.8"
       VerticalAlignment="Bottom"
       Height="32.8"/>
</Grid>

1 Ответ

0 голосов
/ 09 октября 2009

Да, я бы так и поступил. Вы также можете добавить привязку к ползунку вместо текстового поля и обойтись без UpdateSourceTrigger ...

<Slider x:Name="slider"
        VerticalAlignment="Bottom"
        Height="32.8"
        Value="{Binding ElementName=txtie, Path=Text, Mode=TwoWay}" />

Я бы сохранил все как есть. Такое ощущение, что ползунок - основной фокус, и к нему прикреплено текстовое поле.

Кроме того, ваш оригинальный пример работает, просто поведение по умолчанию в этом сценарии заключается в обновлении привязки, когда текстовое поле теряет фокус, а не когда свойство изменяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...