それぞれがリストの特定の要素に対応するいくつかのトグルボタンのDataContextを設定しようとしています。これらのトグルボタンは静的であり、動的に生成されません。これは、これらをレイアウトにグループ化し、すべてを1つの領域に配置したくないためです。
ListOfRoles
はオブジェクトのコレクションであり、各オブジェクトにはIsSelected
プロパティ(タイプbool?
)と名前があります。コンバーターは、nameToObject
コンバーターで指定された名前のオブジェクトを返します。
私の問題は、XAMLがIsSelected
DataContextバインディングを評価する前にバインドしようとしていることです。これにより、システムで例外がスローされます。適用されているオブジェクトにバインドしようとしRoleContainerStyle
、クラッシュします。XAMLは次のとおりです。
<Style x:Key="RoleContainerStyle" TargetType="{x:Type MyControls:MyListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type MyControls:MyListBoxItem}">
<Grid>
<StackPanel Orientation="Horizontal" >
<ToggleButton Content="Driver To Scene" IsChecked="{Binding IsSelected}" DataContext="{Binding ListOfRoles, Converter={StaticResource nameToObject}, ConverterParameter='Driver To'}" HorizontalAlignment="Stretch" Margin="0" Width="80" Height="40" FontSize="14.667" />
<ToggleButton Content="Driver From Scene" IsChecked="{Binding IsSelected}" DataContext="{Binding ListOfRoles, Converter={StaticResource nameToObject}, ConverterParameter='Driver From'}" HorizontalAlignment="Stretch" Margin="8,0,0,0" Width="80" Height="40" FontSize="14.667" />
</StackPanel>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
コンバーターにブレークポイントを設定し、バインディングを評価する前に、コンバーターに入らないことを確認しました。IsSelected
IsSelected
バインディングを削除すると、コンバーター内で実行をトラップできるため、XAMLについて何かが欠けている場合を除いて、評価の順序に問題があるように見えます。
XAMLでプロパティの順序を変更し、Bindings(ネストされたタグ)を指定する長い形式を使用してみましたが、アイデアがありません。
前もって感謝します。