Property Text custom TextBox'a nie binduje się w parencie

0

Cześć. Stworzyłem sobie customową kontrolkę textbox'a. W niej w zależności od zaznaczonych opcji wpisuję tekst do właściwości Text.
Wszystko wewnątrz tej kontrolki customowej działa tak jak natura chciała. Dla pewności overridowałem OnTextChanged i wszystko się wywołuje a i w Text jest to co trzeba.
Problem zaczyna się jeśli tą kontrolkę sobie zaimplementuję w jakimś widoku. Standardowo binduję w sposób
Text="{Binding MyPropertyInViewModel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
lecz ani słychu ani widu o wartości Text w MyPropertyInViewModel.
ViewModel też jest dobrze bindowany bo z normalnego TextBox'a Text przychodzi tak jak trzeba.
Pytanie brzmi: czy trzeba coś wołać dodatkowo w samej customowej kontrolce po wpisaniu wartości do Text żeby w parencie to złapało?

0

Rozumiem że Text to jest DependencyProperty z twojej kontrolki?
Chyba nie obejdzie się tu jeśli nie pokażesz kodu tej kontorolki.

0

Nie. Text jest z dziedziczenia TextBox w mojej kontrolce.

plik .cs

public partial class CustomTextBox : TextBox
    {
        public CustomTextBox()
        {
            InitializeComponent();
            DataContext = this;
        }

//+ kilka innych dependency property nie mających znaczenia
}

plik .xaml

<TextBox x:Class="Common.CustomTextBox"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         mc:Ignorable="d"
         Height="25"
         d:DesignWidth="200">

    <TextBox.Template>
        <ControlTemplate TargetType="TextBox">

            <TextBox Text="{Binding Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  />
        </ControlTemplate>
    </TextBox.Template>
</TextBox>

Obciąłem kod by nie dawać niepotrzebnych rzeczy do analizowania. Już taki kod nie działa w parencie. Wewnątrz customowej kontrolki binduje się do Text pochodzącego z dziedziczenia TextBox'a (i wartości wchodzą pięknie) lecz na zewnątrz już nie.

Druga ciekawostka to to że jak w parencie podam na "sztywno" tekst Text="test" to się to ładnie ustawi. Czyli bindowanie w samej customowej kontrolce też jest w porządku bo z zewnątrz do wewnątrz wchodzi dobrze. Tylko z wewnątrz na zewnątrz nie jest przekazywane i tutaj jest problem. Podejrzewam że trzeba coś jeszcze ręcznie wewnątrz wołać żeby na zewnątrz to poszło.

Próbowałem dodać DependencyProperty z użyciem new string Text ale i tak nie działało. Podejrzewam że jakbym zrobił inne Dependency np CustomText to wszystko by działało (edit. ale nie działa patrz post niżej) ale nie chce pamiętać potem że trzeba się bindować do CustomText dlatego chce wykorzystać po prostu już dostępne Text.

0

Podejrzewam że DependencyProperty jest po prostu jednokierunkowe. Działa tylko do wewnątrz. Można coś za jego pomocą przekazać ale pobrać z niego już się nie da.

1 użytkowników online, w tym zalogowanych: 0, gości: 1