Hello,
Welcome to our Microsoft Q&A platform!
By checking your code, the reason why IsColumn2Visible and IsColumn3Visible can't work is because your binding targets are in a data template or control template, then its XAML namescope is the XAML namescope of the templated parent. So the XAML namescope of your binding targets is actually MultiSelectListView which named MultiSelectList instead of your UserView. When you set ElementName as UserView, it can't find. So you need to set the ElementName as MultiSelectList.
Update:
Since you can find the 'MultiSelectList' ElementName, so you can set its DataContext as UserView and use DataContext.Column2Width to bind with Width. For example:
UserView:
<local:MultiSelectListView ItemsSource="{x:Bind Users, Mode=OneWay}">
<local:MultiSelectListView.ListTemplate>
<DataTemplate x:DataType="model:UserModel">
<Grid Margin="32,0,20,0" Background="Transparent">
<Grid Margin="0,12,0,12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"></ColumnDefinition>
<ColumnDefinition Width="{Binding DataContext.Column2Width, ElementName=MultiSelectList, Mode=OneWay}"/>
<ColumnDefinition Width="{Binding DataContext.Column3Width, ElementName=MultiSelectList, Mode=OneWay}"/>
</Grid.ColumnDefinitions>
<TextBlock Text="Hello"/>
<TextBlock Grid.Column="1" VerticalAlignment="Center" Margin="5,0,25,0" Text="Column2"/>
<TextBlock Grid.Column="2" VerticalAlignment="Center" Margin="5,0,25,0" Text="Column3"/>
</Grid>
</Grid>
</DataTemplate>
</local:MultiSelectListView.ListTemplate>
</local:MultiSelectListView>
UserView.xaml.cs:
public MainPage()
{
this.InitializeComponent();
Users.Add(new UserModel());
Users.Add(new UserModel());
//Set current DataContext as current page
this.DataContext = this;
}