I am working on an application where Repository
objects are displayed via a DataTemplate that contains a modified version of a TextBox
, which supports binding to the SelectionStart
, SelectionLength
, and VerticalOffset
.
The DataTemplate looks like this:
<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>
The problem is that when I change the Repository
that is currently being displayed; the SelectionStart
, SelectionLength
, and VerticalOffset
all seem to be getting set to 0, even when those properties of the Repository
object are not 0.
I think that this is happening in the instant before the text is displayed when the SelectionStart
, SelectionLength
, and VerticalOffset
can not be more than 0. This does not only set the actual properties of the TextBox
to zero, but also updates the bindings and sets the properties of the Repository
object to zero.
Is there any way that I can prevent this from happening?
--Edit--
I don't know if posting dl links to projects is a no-no or not on SO, but here is a link to a project I created to demonstrate the problem I am having: http://dl.dropbox.com/u/1520079/RepositoryProblemDemo.zip
When you run the demo-app the selection you can click the "Switch Repository" button to change the repository that is displayed in the textbox. If you look to the right of the textbox the current repository's properties all get set to zero when you switch to the other one.
A difference between this demo and my actual app is that in my app repositories will be switched via hotkeys, not a button.