以下のapp:ucPathSelectionコントロールの可視性バインディングが機能するのはなぜですか...
<UserControl.Resources>
<loc:VM_ucPathSelect x:Key="PathSelectVM" />
</UserControl.Resources>
...
<Grid Name="SelectionGrid">
<Grid.DataContext>
<Binding Source= "{StaticResource PathSelectVM}" />
</Grid.DataContext>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="288*" />
<ColumnDefinition Width="1" />
<ColumnDefinition Width="288*" />
<ColumnDefinition Width="1" />
<ColumnDefinition Width="288*" />
<ColumnDefinition Width="1" />
<ColumnDefinition Width="288*" />
</Grid.ColumnDefinitions>
<GridSplitter Grid.Row="0" Grid.Column="1"
BorderThickness="1" BorderBrush="Gray" IsTabStop="False" />
<GridSplitter Grid.Row="0" Grid.Column="3"
BorderThickness="1" BorderBrush="Gray" IsTabStop="False" />
<GridSplitter Grid.Row="0" Grid.Column="5"
BorderThickness="1" BorderBrush="Gray" IsTabStop="False" />
<app:ucPathSelectColumn Grid.Row="0" Grid.Column="0"
x:Name="ucPathSelectColumn1"
Visibility="{Binding Source={StaticResource PathSelectVM}, Path=ColumnVisible1}"
DataContext="{Binding Path=VM1}" />
<app:ucPathSelectColumn Grid.Row="0" Grid.Column="2"
x:Name="ucPathSelectColumn2"
Visibility="{Binding Source={StaticResource PathSelectVM},Path=ColumnVisible2}"
DataContext="{Binding Path=VM2}" />
<app:ucPathSelectColumn Grid.Row="0" Grid.Column="4"
x:Name="ucPathSelectColumn3"
Visibility="{Binding Source={StaticResource PathSelectVM},Path=ColumnVisible3}"
DataContext="{Binding Path=VM3}" />
<app:ucPathSelectColumn Grid.Row="0" Grid.Column="6"
x:Name="ucPathSelectColumn4"
Visibility="{Binding Source={StaticResource PathSelectVM},Path=ColumnVisible4}"
DataContext="{Binding Path=VM4}" />
</Grid>
... Source属性を削除すると、失敗しますか?
<app:ucPathSelectColumn Grid.Row="0" Grid.Column="0"
x:Name="ucPathSelectColumn1"
Visibility="{Binding ColumnVisible1}"
DataContext="{Binding Path=VM1}" />
<app:ucPathSelectColumn Grid.Row="0" Grid.Column="2"
x:Name="ucPathSelectColumn2"
Visibility="{Binding Path=ColumnVisible2}"
DataContext="{Binding Path=VM2}" />
<app:ucPathSelectColumn Grid.Row="0" Grid.Column="4"
x:Name="ucPathSelectColumn3"
Visibility="{Binding Path=ColumnVisible3}"
DataContext="{Binding Path=VM3}" />
<app:ucPathSelectColumn Grid.Row="0" Grid.Column="6"
x:Name="ucPathSelectColumn4"
Visibility="{Binding Path=ColumnVisible4}"
DataContext="{Binding Path=VM4}" />
ソースは冗長に見えますが、ソースがないと失敗します。グリッド要素のDataContextは、このコントロールのVMとして上に設定されています。各app:ucPathSelectColumnのDataContextは、同じVMのプロパティとして提供されます...これは同じ資格なしで機能します。可視性のみが失敗していました(デバッグメッセージ、オブジェクトのプロパティが見つかりませんでした...そして報告されたオブジェクトは目的のVM(PathSelectVM)のタイプでした。
同じVMの1つのプロパティがucPathSelectColumnコントロールのVisibilityにバインドするために使用されており、もう1つのプロパティはucPathSelectColumnコントロールのDataContextです。(編集:いいえ、そうではありません。同じスコープのDataContext割り当てを介してVMセットのタイプを報告しています。以下の答えは正しいです。)