Open
Description
Describe the bug
I have a Page with a UserControl that has a property ViewModel that is created by the DI container.
The BoolToVisibilityConverter does not refresh the UI in the UserControl.
<UserControl
x:Class="CSA2.Controls.AddEditControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:CSA2.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i="using:Microsoft.Xaml.Interactivity"
xmlns:ic="using:Microsoft.Xaml.Interactions.Core"
xmlns:converters="using:CommunityToolkit.WinUI.UI.Converters"
mc:Ignorable="d">
<UserControl.Resources>
<converters:BoolToObjectConverter x:Key="BoolToVisibilityConverter" TrueValue="Visible" FalseValue="Collapsed"/>
<converters:BoolToObjectConverter x:Key="InverseBoolToVisibilityConverter" TrueValue="Collapsed" FalseValue="Visible"/>
</UserControl.Resources>
<Grid HorizontalAlignment="Left" Margin="0 10 0 0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Row="0" VerticalAlignment="Top" Margin="0 0 0 5">
<StackPanel Orientation="Horizontal">
<ToggleButton
Margin="5 0 0 0"
Visibility="{x:Bind ViewModel.IsEditVisible, Mode=TwoWay,
Converter={StaticResource BoolToVisibilityConverter}}"
Command="{x:Bind ViewModel.AddUserCommand,Mode=OneWay}"
IsChecked="{x:Bind ViewModel.IsCreate, Mode=TwoWay}">
<StackPanel Orientation="Horizontal">
<TextBlock x:Uid="CreateNewButtonText" Margin="2 0 5 0" />
<FontIcon FontFamily="Segoe MDL2 Assets" Glyph="" />
</StackPanel>
</ToggleButton>
<ToggleButton
Margin="5 0 0 0"
Visibility="{x:Bind ViewModel.IsEditVisible, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource BoolToVisibilityConverter}}"
Command="{x:Bind ViewModel.EditUserCommand,Mode=OneWay}"
IsChecked="{x:Bind ViewModel.IsEdit, Mode=TwoWay}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Edit" Margin="0 0 5 0" />
<FontIcon FontFamily="Segoe MDL2 Assets" Glyph="" />
</StackPanel>
</ToggleButton>
</StackPanel>
</Grid>
<Grid Row="1" VerticalAlignment="Top" Margin="5 0 0 5"
Visibility="{x:Bind ViewModel.IsSingleSelection, Mode= TwoWay, UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource BoolToVisibilityConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock x:Uid="UserNameText"
VerticalAlignment="Center"
Margin="0 0 5 5" />
<TextBox x:Uid="UserNameNullText"
Grid.Row="0"
Grid.Column="1"
IsReadOnly="{x:Bind ViewModel.IsReadOnly, Mode=TwoWay}"
Margin="0 0 5 5"
Width="250"
Height="25"
Text="{x:Bind ViewModel.UserName, Mode=TwoWay}" />
<TextBlock Grid.Row="1" x:Uid="UserEmailText"
Grid.Column="0"
VerticalAlignment="Center"
Margin="0 0 5 5" />
<TextBox x:Uid="UserEmailNullText"
IsReadOnly="{x:Bind ViewModel.IsReadOnly, Mode=TwoWay}"
Margin="0 0 5 5"
Grid.Row="1"
Grid.Column="1"
Width="250"
Height="25"
Text="{x:Bind ViewModel.UserEmail, Mode= TwoWay}" />
<TextBlock Grid.Row="2" x:Uid="UserDepartmentText"
Grid.Column="0"
VerticalAlignment="Center"
Margin="0 0 5 5" />
<ComboBox Grid.Row="2"
Grid.Column="1"
Height="30"
Visibility="{x:Bind ViewModel.IsReadOnly,Mode=TwoWay,
Converter={StaticResource InverseBoolToVisibilityConverter}}"
IsEditable="False"
Margin="0 0 5 5"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
ItemsSource="{x:Bind ViewModel.UserDepartments,Mode = OneWay}"
SelectedItem="{x:Bind ViewModel.UserDepartment, Mode=TwoWay}" />
<TextBox x:Uid="UserDepartmentNullText"
Grid.Row="2"
Grid.Column="1"
Visibility="{x:Bind ViewModel.IsReadOnly, Mode=TwoWay,
Converter={StaticResource BoolToVisibilityConverter}}"
IsReadOnly="{x:Bind ViewModel.IsReadOnly, Mode=TwoWay}"
Margin="0 0 5 5"
Width="250"
Height="25"
Text="{x:Bind ViewModel.UserDepartment, Mode= TwoWay}" />
<TextBlock Grid.Row="3" Text="User Status"
Grid.Column="0"
VerticalAlignment="Center"
Margin="0 0 5 5" />
<ComboBox Grid.Row="3"
Grid.Column="1"
Height="30"
Visibility="{x:Bind ViewModel.IsReadOnly,Mode=TwoWay,
Converter={StaticResource InverseBoolToVisibilityConverter}}"
IsEditable="False"
Margin="0 0 5 5"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
ItemsSource="{x:Bind ViewModel.UserStatus, Mode= OneWay}"
SelectedItem="{x:Bind ViewModel.SelectedUserStatus, Mode=TwoWay}" />
<TextBox Grid.Row="3"
Grid.Column="1"
Visibility="{x:Bind ViewModel.IsReadOnly, Mode=TwoWay,
Converter={StaticResource BoolToVisibilityConverter}}"
IsReadOnly="{x:Bind ViewModel.IsReadOnly, Mode=TwoWay}"
Margin="0 0 5 5"
Width="250"
Height="30"
Text="{x:Bind ViewModel.SelectedUserStatus, Mode= TwoWay}" />
</Grid>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock x:Uid="UserRoleText"
VerticalAlignment="Top"
HorizontalAlignment="Center"
Margin="5 0 2 5" />
<Border Grid.Row="1"
Grid.Column="0"
BorderThickness=".5"
BorderBrush="LightGray"
CornerRadius="2">
<ListView
ItemsSource="{x:Bind ViewModel.SelectedUserRoles, Mode=OneWay}"
SelectionMode="None"
Visibility="{x:Bind ViewModel.IsReadOnly, Mode=TwoWay,
Converter={StaticResource BoolToVisibilityConverter}}"/>
</Border>
<Border Grid.Row="1"
Grid.Column="0"
BorderThickness=".5"
BorderBrush="LightGray"
CornerRadius="2"
Visibility="{x:Bind ViewModel.IsReadOnly,Mode=TwoWay,
Converter={StaticResource InverseBoolToVisibilityConverter}}">
<ListView x:Name="UserRoles"
ItemsSource="{x:Bind ViewModel.UserRoles, Mode=OneWay}"
SelectionMode="Multiple"
VerticalContentAlignment="Top"
ScrollViewer.IsVerticalRailEnabled="True"
ScrollViewer.VerticalScrollBarVisibility="Visible">
<i:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="SelectionChanged">
<ic:InvokeCommandAction
Command="{x:Bind ViewModel.SelectedItemsCommand}"
CommandParameter="{x:Bind UserRoles.SelectedItems,Mode=OneWay}" />
</ic:EventTriggerBehavior>
</i:Interaction.Behaviors>
</ListView>
</Border>
<TextBlock Grid.Row="0" Grid.Column="1" x:Uid="UserFunctionsText"
VerticalAlignment="Top"
HorizontalAlignment="Center"
Margin="5 0 2 5" />
<Border Grid.Row="1"
Grid.Column="1"
Margin="5 0 0 0"
BorderThickness=".5"
BorderBrush="LightGray"
CornerRadius="2">
<ListView
ItemsSource="{x:Bind ViewModel.SelectedUserFunctions, Mode=OneWay}"
SelectionMode="None"
Visibility="{x:Bind ViewModel.IsReadOnly, Mode=TwoWay,
Converter={StaticResource BoolToVisibilityConverter}}"/>
</Border>
<Border Grid.Row="1"
Grid.Column="1"
Margin="5 0 0 0"
BorderThickness=".5"
BorderBrush="LightGray"
CornerRadius="2"
Visibility="{x:Bind ViewModel.IsReadOnly,Mode=TwoWay,
Converter={StaticResource InverseBoolToVisibilityConverter}}">
<ListView x:Name="UserFunctions"
ItemsSource="{x:Bind ViewModel.UserFunctions, Mode=OneWay}"
SelectionMode="Multiple"
VerticalContentAlignment="Top"
ScrollViewer.IsVerticalRailEnabled="True"
ScrollViewer.VerticalScrollBarVisibility="Visible">
<i:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="SelectionChanged">
<ic:InvokeCommandAction
Command="{x:Bind ViewModel.SelectedItemsCommand}"
CommandParameter="{x:Bind UserFunctions.SelectedItems,Mode=OneWay}" />
</ic:EventTriggerBehavior>
</i:Interaction.Behaviors>
</ListView>
</Border>
</Grid>
</Grid>
<Grid Grid.Row="1" VerticalAlignment="Top"
Margin="5 0 0 5"
Visibility="{x:Bind ViewModel.IsMultiSelection,
Converter={StaticResource BoolToVisibilityConverter}}">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Text="User Status"
Grid.Column="0"
VerticalAlignment="Center"
Margin="0 0 5 5" />
<ComboBox Grid.Row="1"
Grid.Column="0"
Height="30"
IsEditable="False"
Margin="0 0 5 5"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
ItemsSource="{x:Bind ViewModel.UserStatus, Mode= OneWay}"
SelectedItem="{x:Bind ViewModel.SelectedUserStatus, Mode=TwoWay}" />
<TextBlock x:Uid="UserDepartmentText"
Grid.Row="0"
Grid.Column="1"
VerticalAlignment="Top"
HorizontalAlignment="Center"
Margin="2 0 5 0"/>
<Border Grid.Row="1"
Grid.Column="1"
BorderThickness=".5"
BorderBrush="LightGray"
CornerRadius="2">
<ListView x:Name="UserDepartments"
ItemsSource="{x:Bind ViewModel.UserDepartments, Mode=TwoWay}"
SelectionMode="Single"
VerticalContentAlignment="Top"
ScrollViewer.IsVerticalRailEnabled="True"
ScrollViewer.VerticalScrollBarVisibility="Visible">
<i:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="SelectionChanged">
<ic:InvokeCommandAction
Command="{x:Bind ViewModel.SelectedItemsCommand}"
CommandParameter="{x:Bind UserDepartments.SelectedItems,Mode=OneWay}" />
</ic:EventTriggerBehavior>
</i:Interaction.Behaviors>
</ListView>
</Border>
<TextBlock x:Uid="UserRoleText"
Grid.Row="0"
Grid.Column="2"
VerticalAlignment="Top"
HorizontalAlignment="Center"
Margin="5 0 2 5" />
<Border Grid.Row="1"
Grid.Column="2"
Margin="5 0 0 0"
BorderThickness=".5"
BorderBrush="LightGray"
CornerRadius="2">
<ListView x:Name="mUserRoles"
ItemsSource="{x:Bind ViewModel.UserRoles, Mode=OneWay}"
SelectionMode="Multiple"
VerticalContentAlignment="Top"
ScrollViewer.IsVerticalRailEnabled="True"
ScrollViewer.VerticalScrollBarVisibility="Visible">
<i:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="SelectionChanged">
<ic:InvokeCommandAction
Command="{x:Bind ViewModel.SelectedItemsCommand}"
CommandParameter="{x:Bind mUserRoles.SelectedItems,Mode=OneWay}" />
</ic:EventTriggerBehavior>
</i:Interaction.Behaviors>
</ListView>
</Border>
<TextBlock Grid.Row="0" Grid.Column="3" x:Uid="UserFunctionsText"
VerticalAlignment="Top"
HorizontalAlignment="Center"
Margin="5 0 2 5" />
<Border Grid.Row="1"
Grid.Column="3"
Margin="5 0 0 0"
BorderThickness=".5"
BorderBrush="LightGray"
CornerRadius="2">
<ListView x:Name="mUserFunctions"
ItemsSource="{x:Bind ViewModel.UserFunctions, Mode=OneWay}"
SelectionMode="Multiple"
VerticalContentAlignment="Top"
ScrollViewer.IsVerticalRailEnabled="True"
ScrollViewer.VerticalScrollBarVisibility="Visible">
<i:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="SelectionChanged">
<ic:InvokeCommandAction
Command="{x:Bind ViewModel.SelectedItemsCommand}"
CommandParameter="{x:Bind mUserFunctions.SelectedItems,Mode=OneWay}" />
</ic:EventTriggerBehavior>
</i:Interaction.Behaviors>
</ListView>
</Border>
</Grid>
<Grid Grid.Row="1" VerticalAlignment="Top"
Visibility="{x:Bind ViewModel.IsCreateNewUser,
Converter={StaticResource BoolToVisibilityConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock x:Uid="UserNameText"
VerticalAlignment="Center"
Margin="0 0 5 5" />
<TextBox x:Uid="UserNameNullText"
Grid.Row="0"
Grid.Column="1"
Margin="0 0 5 5"
Width="250"
Height="25"
Text="{x:Bind ViewModel.UserName, Mode=TwoWay}" />
<TextBlock x:Uid="UserEmailText"
Grid.Row="1"
Grid.Column="0"
VerticalAlignment="Center"
Margin="0 0 5 5" />
<TextBox x:Uid="UserEmailNullText"
Margin="0 0 5 5"
Grid.Row="1"
Grid.Column="1"
Width="250"
Height="25"
Text="{x:Bind ViewModel.UserEmail, Mode= TwoWay}" />
<TextBlock x:Uid="UserDepartmentText"
Grid.Row="2"
Grid.Column="0"
VerticalAlignment="Center"
Margin="0 0 5 5" />
<ComboBox Grid.Row="2"
Grid.Column="1"
Height="30"
IsEditable="False"
Margin="0 0 5 5"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
ItemsSource="{x:Bind ViewModel.UserDepartments, Mode=OneWay}"
SelectedItem="{x:Bind ViewModel.UserDepartment, Mode=TwoWay}" />
<TextBlock Grid.Row="3" Text="User Status"
Grid.Column="0"
VerticalAlignment="Center"
Margin="0 0 5 5" />
<ComboBox Grid.Row="3"
Grid.Column="1"
Height="30"
IsEditable="False"
Margin="0 0 5 5"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
ItemsSource="{x:Bind ViewModel.UserStatus, Mode= OneWay}"
SelectedItem="{x:Bind ViewModel.SelectedUserStatus, Mode=TwoWay}" />
</Grid>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock x:Uid="UserRoleText"
VerticalAlignment="Top"
HorizontalAlignment="Center"
Margin="5 0 2 5" />
<Border Grid.Row="1"
Grid.Column="0"
BorderThickness=".5"
BorderBrush="LightGray"
CornerRadius="2">
<ListView x:Name="cuUserRoles" ItemsSource="{x:Bind ViewModel.UserRoles, Mode=OneWay}"
SelectionMode="Multiple"
VerticalContentAlignment="Top"
ScrollViewer.IsVerticalRailEnabled="True"
ScrollViewer.VerticalScrollBarVisibility="Visible">
<i:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="SelectionChanged">
<ic:InvokeCommandAction
Command="{x:Bind ViewModel.SelectedItemsCommand}"
CommandParameter="{x:Bind cuUserRoles.SelectedItems,Mode=OneWay}" />
</ic:EventTriggerBehavior>
</i:Interaction.Behaviors>
</ListView>
</Border>
<TextBlock Grid.Row="0" Grid.Column="1" x:Uid="UserFunctionsText"
VerticalAlignment="Top"
HorizontalAlignment="Center"
Margin="5 0 2 5" />
<Border Grid.Row="1"
Grid.Column="1"
Margin="5 0 0 0"
BorderThickness=".5"
BorderBrush="LightGray"
CornerRadius="2">
<ListView x:Name="cuUserFunctions"
ItemsSource="{x:Bind ViewModel.UserFunctions, Mode=OneWay}"
SelectionMode="Multiple"
VerticalContentAlignment="Top"
ScrollViewer.IsVerticalRailEnabled="True"
ScrollViewer.VerticalScrollBarVisibility="Visible">
<i:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="SelectionChanged">
<ic:InvokeCommandAction
Command="{x:Bind ViewModel.SelectedItemsCommand}"
CommandParameter="{x:Bind cuUserFunctions.SelectedItems,Mode=OneWay}" />
</ic:EventTriggerBehavior>
</i:Interaction.Behaviors>
</ListView>
</Border>
</Grid>
</Grid>
<StackPanel Orientation="Horizontal" Grid.Row="2" VerticalAlignment="Bottom">
<Button Margin="0 5 5 0" Command="{x:Bind ViewModel.SubmitCommand}">
<TextBlock x:Uid="SubmitText" />
</Button>
<Button Margin="5 5 0 0" Command="{x:Bind ViewModel.CancelCommand}">
<TextBlock x:Uid="CancelText" />
</Button>
</StackPanel>
</Grid>
</UserControl>
Regression
No response
Reproducible in sample app?
- This bug can be reproduced in the sample app.
Steps to reproduce
Create a Page and a ViewModel and bind.
Create a UserControl and bind.
Add UserControl to the Page.
In the UserControl add a BoolToVisibilityConverter to make a Grid Visible or Collapsed based on the Boolean property in the ViewModel of the UserControl.
Expected behavior
Expected for the BoolToVisibilityConverter change Visibility from Collapsed to Visible.
Screenshots
How I want this to apply the BoolToVisibilityConverter
Here none of the converters work.
Windows Build Number
- Windows 10 1809 (Build 17763)
- Windows 10 1903 (Build 18362)
- Windows 10 1909 (Build 18363)
- Windows 10 2004 (Build 19041)
- Windows 10 20H2 (Build 19042)
- Windows 10 21H1 (Build 19043)
- Windows 11 21H2 (Build 22000)
- Other (specify)
Other Windows Build number
No response
App minimum and target SDK version
- Windows 10, version 1809 (Build 17763)
- Windows 10, version 1903 (Build 18362)
- Windows 10, version 1909 (Build 18363)
- Windows 10, version 2004 (Build 19041)
- Other (specify)
Other SDK version
Windows 11
Visual Studio Version
No response
Visual Studio Build Number
Version 17.3.0
Device form factor
No response
Nuget packages
communitytoolkit.mvvm \8.0.0
microsoft.extensions.hosting\6.0.1
microsoft.windowsappsdk\1.1.3
communitytoolkit.winui.ui.controls\7.1.2
Additional context
No response
Help us help you
No.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
No status
Activity