ChildWindow close doesn't correctly return IsEnabled state when Mode=TwoWay is set

4 posts, 0 answers
  1. Rob Ainscough
    Rob Ainscough avatar
    188 posts
    Member since:
    Jan 2010

    Posted 22 Jun Link to this post

    I think this bug is a core problem with Microsoft SL5 as the issue surfaces with Microsoft controls as well as Telerik controls.  But I thought I'd bring it to attention as it might be valuable information for other developers to garnish.

    Situation:

    1.  From a UserControl have a control (button, RadComboBox, etc.) that has the IsEnabled bound to an MVVM class property ... example

    <telerik:RadComboBox x:Name="RentalTypeComboBox" Grid.ColumnSpan="2" Grid.Column="6" Grid.Row="1" Style="{StaticResource DomicoRadComboBoxFill}" DisplayMemberPath="RentalTypeName" ItemsSource="{Binding Path=RentalTypes, Mode=TwoWay}" SelectedItem="{Binding Path=RentalType, TargetNullValue='None', FallbackValue='N/A', Mode=TwoWay}" IsEnabled="{Binding Path=RentalTypeSelectionEnabled, Mode=TwoWay}"/>

    2.  Now instantiate (show) a ChildWindow ... this effectively disables the background by setting IsEnabled=False for all controls in the UserControl.

    3.  Once the user initiates the closing of the ChildWindow all the background control in UserControl should be reset to "IsEnabled" and then their current state gets re-applied.  This works on all controls except when IsEnabled is used and it's Mode=TwoWay.  If Mode=TwoWay the control will stay in a disabled state.  Remove the Mode property like below and it works as expected:

    <telerik:RadComboBox x:Name="RentalTypeComboBox" Grid.ColumnSpan="2" Grid.Column="6" Grid.Row="1" Style="{StaticResource DomicoRadComboBoxFill}" DisplayMemberPath="RentalTypeName" ItemsSource="{Binding Path=RentalTypes, Mode=TwoWay}" SelectedItem="{Binding Path=RentalType, TargetNullValue='None', FallbackValue='N/A', Mode=TwoWay}" IsEnabled="{Binding Path=RentalTypeSelectionEnabled}"/>

    NOTE: It's important to understand that this issue WILL NOT surface under VS 2015 debug session, this issue ONLY surfaces when deployed to a real IIS web server.  So if anyone tries to replicate under VS 2015 you will NOT be able to, you MUST deploy to an IIS web server to see this issue of IsEnabled with binding Mode=TwoWay when using showing a ChildWindow from a UserControl.

    Cheers, Rob.

     

  2. Martin Ivanov
    Admin
    Martin Ivanov avatar
    1402 posts

    Posted 27 Jun Link to this post

    Hello Rob,

    Thank you for sharing this scenario. 

    I played around with the ChildWindow control and indeed that seems as a Silverlight issue. I was able to reproduce it with a single ContentControl and a Button. For whom that would be interesting I attached the example used for testing. If you deploy this in IIS, the issue appears.

    I also found some information on the internet about this scenario and you can work it around by setting the IsEnabled property of the view model manually in the Closed event of the ChildWindow. For example:
    var w = new ChildWindow();
    w.Closed += (s, args) => { (this.DataContext as MainViewModel).IsEnabled = true; };
    w.Show();

    Regards,
    Martin Ivanov
    Progress Telerik
    Try our brand new, jQuery-free Angular 2 components built from ground-up which deliver the business app essential building blocks - a grid component, data visualization (charts) and form elements.
  3. Rob Ainscough
    Rob Ainscough avatar
    188 posts
    Member since:
    Jan 2010

    Posted 28 Jun in reply to Martin Ivanov Link to this post

    Martin,

    Glad you were able to replicate it, I doubt Microsoft will fix the issue.  Along similar lines I found an issue with RadMaskedNumericInput that exhibited the same behavior with Mode=TwoWay but on the "Value" property and this time around the issue would trigger in VS 2015 debug session but would NOT trigger when deployed to an IIS web server.

    For some reason the .Show() would cycle thru all the controls for "get" but whenever RadMaskedNumericInput binding was found it would operate the Get and then try to Set a default value to 0.0??  Triple checked my code and nothing was being assigned to the bound property, so it appears somewhere in the RadMaskedNumericInput code you folks are setting the Value property = 0.0.  The ONLY happens with the RadMaskedNumericInput and Mask property set.

    Cheers, Rob.

  4. Martin Ivanov
    Admin
    Martin Ivanov avatar
    1402 posts

    Posted 03 Jul Link to this post

    Hi Rob,

    I tested this with RadMaskedNumericInput, but I wasn't able to reproduce the issue. Can you prepare some runnable code and send it over so I can check it? Alternatively, you can open a new support ticket and share a project there.

    Regards,
    Martin Ivanov
    Progress Telerik
    Try our brand new, jQuery-free Angular 2 components built from ground-up which deliver the business app essential building blocks - a grid component, data visualization (charts) and form elements.
Back to Top