Как сделать так, чтобы пользовательское свойство зависимости можно было изменять в реальном времени при привязке в wpf?

Когда мы связываем textblock.Text с длиной текста Textbox, как это

<TextBox x:Name="txtName" Grid.Row="0" />
<TextBlock Text="{Binding ElementName=txtName, Path=Text.Length}" Grid.Row="1" />

Текст текстового блока будет изменяться вместе с текстом txtName в реальном времени. Но когда я определяю новое свойство DependencyProperty в пользовательском элементе управления WPF следующим образом:

    //MyCustomUC.xaml.cs
    static FrameworkPropertyMetadata propertymetadata = new FrameworkPropertyMetadata("Comes as Default", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(MyCustom_PropertyChanged), new CoerceValueCallback(MyCustom_CoerceValue), false, UpdateSourceTrigger.PropertyChanged);

    public static readonly DependencyProperty MyCustomProperty = DependencyProperty.Register("MyCustom", typeof(string), typeof(MyCustomUC), propertymetadata, new ValidateValueCallback(MyCustom_Validate));

    public string MyCustom
    {
        get
        {
            return this.GetValue(MyCustomProperty) as string;
        }
        set
        {
            this.SetValue(MyCustomProperty, value);
        }
    }

и привяжите его к текстовому полю

//MyCustomUC.xaml
<UserControl ... x:Name="ucs" ...>
<TextBox Text="{Binding ElementName=ucs, Path=MyCustom}"></TextBox>
</UserControl>

//MainWindow.xaml
<local:MyCustomUC x:Name="ucust" Grid.Row="0" />
<TextBox x:Name="tbChange" Text="{Binding ElementName=ucust, Path=MyCustom}" Grid.Row="1"/>

похоже, что "MyCustom" не будет изменен, пока Textbox не потеряет фокус. Как я могу изменить его, когда текст в текстовом поле в реальном времени? Заранее спасибо.


person Cuero    schedule 26.03.2013    source источник


Ответы (1)


person    schedule
comment
Спасибо. Итак, я обнаружил, что TextBox по умолчанию запускает обновление при потере фокуса. - person Cuero; 26.03.2013