Windows Vista Forums

databinding to 3-state checkbox?
  1. #1


    dave Guest

    databinding to 3-state checkbox?

    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?



      My System SpecsSystem Spec

  2. #2


    John Bundy Guest

    RE: databinding to 3-state checkbox?

    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?

      My System SpecsSystem Spec

  3. #3


    dave Guest

    RE: databinding to 3-state checkbox?

    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?

      My System SpecsSystem Spec

  4. #4


    dave Guest

    RE: databinding to 3-state checkbox?

    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.ArgumentNullException: Value cannot be null.
    Parameter name: value
    at System.Xml.Linq.XElement.set_Value(String value)
    at
    System.Xml.Linq.ComponentModel.XElementValuePropertyDescriptor.SetValue(Object component, Object value)
    at MS.Internal.Data.PropertyPathWorker.SetValue(Object item, Object value)
    at MS.Internal.Data.ClrBindingWorker.UpdateValue(Object 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?

      My System SpecsSystem Spec

  5. #5


    dave Guest

    RE: databinding to 3-state checkbox?

    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:

    > 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.ArgumentNullException: Value cannot be null.
    > Parameter name: value
    > at System.Xml.Linq.XElement.set_Value(String value)
    > at
    > System.Xml.Linq.ComponentModel.XElementValuePropertyDescriptor.SetValue(Object component, Object value)
    > at MS.Internal.Data.PropertyPathWorker.SetValue(Object item, Object value)
    > at MS.Internal.Data.ClrBindingWorker.UpdateValue(Object 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?

      My System SpecsSystem Spec

databinding to 3-state checkbox? problems?

Similar Threads
Thread Thread Starter Forum Replies Last Post
networking my computer in one state to family's computer in another state JoryLee Network & Sharing 1 22 Oct 2009
networking my computer in one state to family's computer in another state JoryLee Network & Sharing 1 22 Oct 2009
Checkbox to never see this pop-up again. Andrew Garttmeyer Vista account administration 1 26 Jul 2007
CheckBox groups Erno Avalon 2 05 Feb 2006
No CheckBox.CheckedChanged? RyanLeeSchneider Avalon 4 31 Jan 2006