HighTechTalks DotNet Forums  

databinding to 3-state checkbox?

Dotnet General Discussions microsoft.public.dotnet.general


Discuss databinding to 3-state checkbox? in the Dotnet General Discussions forum.



Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old   
dave
 
Posts: n/a

Default databinding to 3-state checkbox? - 07-02-2009 , 07:45 AM






I am binding a 3-state checkbox to an XElement:

<CheckBox Content="Summary" IsChecked="{Binding
Path=Element[StatusSummary].Value, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" IsThreeState="True" IsEnabled="False"
Margin="0,79,0,0"/>

it properly reports True and False when it is checked or unchecked. but it
retains the previous value when in the intermediate state. it would seem to
not be firing the propertychanged event to update the xelement when
transitioning to the indeterminate state. Is there a way to bind to get back
the null for indeterminate?

Reply With Quote
  #2  
Old   
John Bundy
 
Posts: n/a

Default RE: databinding to 3-state checkbox? - 07-02-2009 , 12:04 PM






haven't tried it as you have below, but i tried to check this intuitively
with a checkchanged event updating a label.
Me.Label1.Text = Me.CheckBox1.CheckState
i found that the indeterminate value did not fire an event with then
CheckBox1_CheckedChanged event, it did work with CheckBox1_CheckStateChanged.
So you might try checking against that event instead
--
-John
Please rate when your question is answered to help us and others know what
is helpful.


"dave" wrote:

Quote:
I am binding a 3-state checkbox to an XElement:

CheckBox Content="Summary" IsChecked="{Binding
Path=Element[StatusSummary].Value, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" IsThreeState="True" IsEnabled="False"
Margin="0,79,0,0"/

it properly reports True and False when it is checked or unchecked. but it
retains the previous value when in the intermediate state. it would seem to
not be firing the propertychanged event to update the xelement when
transitioning to the indeterminate state. Is there a way to bind to get back
the null for indeterminate?

Reply With Quote
  #3  
Old   
dave
 
Posts: n/a

Default RE: databinding to 3-state checkbox? - 07-02-2009 , 12:21 PM



I know the events for indeterminate state transitions are different, but in
the databinding you just get to specify the property you want to bind to and
the trigger mechanism for updating the source. Unfortunately you can't
specify the event to do the update unless you add your own event handler and
use the manual method to call updatesource. It appears that the trigger
mechanism doesn't recognize transitions to indeterminate, only to checked or
unchecked.

"John Bundy" wrote:

Quote:
haven't tried it as you have below, but i tried to check this intuitively
with a checkchanged event updating a label.
Me.Label1.Text = Me.CheckBox1.CheckState
i found that the indeterminate value did not fire an event with then
CheckBox1_CheckedChanged event, it did work with CheckBox1_CheckStateChanged.
So you might try checking against that event instead
--
-John
Please rate when your question is answered to help us and others know what
is helpful.


"dave" wrote:

I am binding a 3-state checkbox to an XElement:

CheckBox Content="Summary" IsChecked="{Binding
Path=Element[StatusSummary].Value, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" IsThreeState="True" IsEnabled="False"
Margin="0,79,0,0"/

it properly reports True and False when it is checked or unchecked. but it
retains the previous value when in the intermediate state. it would seem to
not be firing the propertychanged event to update the xelement when
transitioning to the indeterminate state. Is there a way to bind to get back
the null for indeterminate?

Reply With Quote
  #4  
Old   
dave
 
Posts: n/a

Default RE: databinding to 3-state checkbox? - 07-02-2009 , 02:20 PM



More info... i was missing something, there is an error generated when it
tries to set the null value back to the xml:

System.Windows.Data Error: 8 : Cannot save value from target back to source.
BindingExpression:Path=Element[StatusSummary].Value; DataItem='XElement'
(HashCode=51920462); target element is 'CheckBox' (Name=''); target property
is 'IsChecked' (type 'Nullable`1')
ArgumentNullException:'System.ArgumentNullExceptio n: Value cannot be null.
Parameter name: value
at System.Xml.Linq.XElement.set_Value(String value)
at
System.Xml.Linq.ComponentModel.XElementValueProper tyDescriptor.SetValue(Object component, Object value)
at MS.Internal.Data.PropertyPathWorker.SetValue(Objec t item, Object value)
at MS.Internal.Data.ClrBindingWorker.UpdateValue(Obje ct value)
at System.Windows.Data.BindingExpression.UpdateSource (Object value)'


So it looks like the set_Value for a string can't handle the null for the
checkbox in tristate mode.





"dave" wrote:

Quote:
I know the events for indeterminate state transitions are different, but in
the databinding you just get to specify the property you want to bind to and
the trigger mechanism for updating the source. Unfortunately you can't
specify the event to do the update unless you add your own event handler and
use the manual method to call updatesource. It appears that the trigger
mechanism doesn't recognize transitions to indeterminate, only to checked or
unchecked.

"John Bundy" wrote:

haven't tried it as you have below, but i tried to check this intuitively
with a checkchanged event updating a label.
Me.Label1.Text = Me.CheckBox1.CheckState
i found that the indeterminate value did not fire an event with then
CheckBox1_CheckedChanged event, it did work with CheckBox1_CheckStateChanged.
So you might try checking against that event instead
--
-John
Please rate when your question is answered to help us and others know what
is helpful.


"dave" wrote:

I am binding a 3-state checkbox to an XElement:

CheckBox Content="Summary" IsChecked="{Binding
Path=Element[StatusSummary].Value, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" IsThreeState="True" IsEnabled="False"
Margin="0,79,0,0"/

it properly reports True and False when it is checked or unchecked. but it
retains the previous value when in the intermediate state. it would seem to
not be firing the propertychanged event to update the xelement when
transitioning to the indeterminate state. Is there a way to bind to get back
the null for indeterminate?

Reply With Quote
  #5  
Old   
dave
 
Posts: n/a

Default RE: databinding to 3-state checkbox? - 07-02-2009 , 02:58 PM



ok, found it... this article describes the problem and fix:
http://code.msdn.microsoft.com/wpfdatabindingnull
just made a nullable bool to string converter to go from null<->"" and it is
happy.

"dave" wrote:

Quote:
More info... i was missing something, there is an error generated when it
tries to set the null value back to the xml:

System.Windows.Data Error: 8 : Cannot save value from target back to source.
BindingExpression:Path=Element[StatusSummary].Value; DataItem='XElement'
(HashCode=51920462); target element is 'CheckBox' (Name=''); target property
is 'IsChecked' (type 'Nullable`1')
ArgumentNullException:'System.ArgumentNullExceptio n: Value cannot be null.
Parameter name: value
at System.Xml.Linq.XElement.set_Value(String value)
at
System.Xml.Linq.ComponentModel.XElementValueProper tyDescriptor.SetValue(Object component, Object value)
at MS.Internal.Data.PropertyPathWorker.SetValue(Objec t item, Object value)
at MS.Internal.Data.ClrBindingWorker.UpdateValue(Obje ct value)
at System.Windows.Data.BindingExpression.UpdateSource (Object value)'


So it looks like the set_Value for a string can't handle the null for the
checkbox in tristate mode.





"dave" wrote:

I know the events for indeterminate state transitions are different, but in
the databinding you just get to specify the property you want to bind to and
the trigger mechanism for updating the source. Unfortunately you can't
specify the event to do the update unless you add your own event handler and
use the manual method to call updatesource. It appears that the trigger
mechanism doesn't recognize transitions to indeterminate, only to checked or
unchecked.

"John Bundy" wrote:

haven't tried it as you have below, but i tried to check this intuitively
with a checkchanged event updating a label.
Me.Label1.Text = Me.CheckBox1.CheckState
i found that the indeterminate value did not fire an event with then
CheckBox1_CheckedChanged event, it did work with CheckBox1_CheckStateChanged.
So you might try checking against that event instead
--
-John
Please rate when your question is answered to help us and others know what
is helpful.


"dave" wrote:

I am binding a 3-state checkbox to an XElement:

CheckBox Content="Summary" IsChecked="{Binding
Path=Element[StatusSummary].Value, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" IsThreeState="True" IsEnabled="False"
Margin="0,79,0,0"/

it properly reports True and False when it is checked or unchecked. but it
retains the previous value when in the intermediate state. it would seem to
not be firing the propertychanged event to update the xelement when
transitioning to the indeterminate state. Is there a way to bind to get back
the null for indeterminate?

Reply With Quote
Reply




Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.