Re: Binding в WPF (продолжение)
От: Fortnum  
Дата: 29.10.10 22:57
Оценка:
А в доказательство того, что Window.TextBox2 может влиять на то, что будет записано в Window.TextBox1, несмотря на то, что Window.TextBox1 привязан к UserControl.Value как к источнику, вот еще более интересный проект со строками. Надо вбить что-нибудь в UserControl.TextBox2, нажать Tab, чтобы сместился фокус, и увидеть, что в Window.TextBox2 будет то, что вы набрали + 2 звездочки, а во всех остальных TextBox'ах + 3 звездочки, хотя в UserControl.Value_Coerce_Shared стоит + "*".

Секрет в том, что Window.TextBox2 является MyTextBox'ом, который я унаследовал от стандартного TextBox'а и сделал ему OverrideMetadata, где добавляю 2 звездочки. В итоге, в UserControl.TextBox2 после смены фокуса возвращается то, что вы набрали + 1 + 2 = +3 звездочки!

Вот определение MyTextBox:
public class MyTextBox : TextBox
{
    public MyTextBox()
    {
        TextProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata("This is MyTextBox's default value",
            FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
            Text_Changed_Shared, Text_Coerce_Shared));
    }

    static void Text_Changed_Shared(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
    }

    static object Text_Coerce_Shared(DependencyObject d, object baseValue)
    {
        return (string)baseValue + "**";
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.