Je travaille sur une application où les objets Repository
sont affichés via un DataTemplate qui contient une version modified d'un TextBox
, qui prend en charge la liaison à la SelectionStart
, SelectionLength
et VerticalOffset
.WPF- problème avec TextBox dans DataTemplate
Le DataTemplate ressemble à ceci:
<DataTemplate DataType="{x:Type m:Repository}">
<controls:ModdedTextBox
x:Name="textBox" Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}"
BindableSelectionStart="{Binding SelectionStart, UpdateSourceTrigger=PropertyChanged}"
BindableSelectionLength="{Binding SelectionLength, UpdateSourceTrigger=PropertyChanged}"
BindableVerticalOffset="{Binding VerticalOffset, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
Le problème est que lorsque je change la Repository
qui est actuellement en cours d'affichage; le SelectionStart
, SelectionLength
et VerticalOffset
tous semblent se mettre à 0, même lorsque les propriétés de l'objet ne sont pas Repository
0.
Je pense que ce qui se passe dans l'instant avant que le texte est affiché lorsque la SelectionStart
, SelectionLength
et VerticalOffset
ne peut pas être supérieur à 0. Cela ne définit pas uniquement les propriétés réelles du TextBox
à zéro, mais met également à jour les liaisons et définit les propriétés de l'objet Repository
sur zéro.
Y a-t-il un moyen de prévenir cela?
--Edit--
Je ne sais pas si l'affichage des liens dl à des projets est un non-non ou non sur le SO, mais voici un lien vers un projet que j'ai créé pour démontrer le problème J'ai: http://dl.dropbox.com/u/1520079/RepositoryProblemDemo.zip
Lorsque vous exécutez la démonstration application de la sélection, vous pouvez cliquer sur le bouton « Switch référentiel » pour changer le référentiel qui est affiché dans la zone de texte. Si vous regardez à droite de la zone de texte, les propriétés du référentiel actuel sont toutes mises à zéro lorsque vous passez à l'autre.
Une différence entre cette démo et mon application actuelle est que dans mes applications, les dépôts seront activés via des raccourcis clavier, pas un bouton.
Pouvez-vous publier des informations sur la manière dont vos propriétés de dépendance Bindable *** sont créées/liées aux propriétés de sélection sous-jacentes? –
Vos liaisons doivent-elles être bidirectionnelles et déclenchées sur PropertyChanged, ou pourriez-vous vous en sortir avec OneWay ou LostFocus? –
J'ai lié à cette question: http://stackoverflow.com/questions/1175618/how-to-bind-selectionstart-property-of-text-box/1849539#1849539 – Justin