自分がやろうとしていることはできないという恐ろしい気持ちがありますが、これで終わりです。たぶんもっと良い方法があります。
別のファイルに ResourceDictionary があり、UserControl (ビュー) に取り込まれています。
<UserControl.Resources>
<ResourceDictionary Source="..\Resources.xaml"/>
</UserControl.Resources>
RD では、いくつかのボタン スタイルを定義します。そのうちの 1 つは条件を含み、"IsCurrentFilter" コンバーターが True を返す場合に前景を赤に設定します。
<Style x:Key="FilterButton" TargetType="Button" BasedOn="{StaticResource ButtonBase}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Converter={StaticResource IsCurrentFilter}}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Foreground" Value="Red" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
コンバーターは、同じ RD のさらに上に定義されています。
<util:IsCurrentFilterConverter x:Key="IsCurrentFilter" ViewModel="{Binding}"/>
問題は、コンバーターが (比較を行うために必要な) ビュー モデルにアクセスできず、ViewModel
プロパティが何もバインドすることを単に拒否することです。エラーは...
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:(no path); DataItem=null; target element is 'IsCurrentFilterConverter' (HashCode=50804710); target property is 'ViewModel' (type 'Object')
...ビジュアルツリーにないことを理解しているので、これはちょっと理にかなっています。
では、この ResourceDictionary 内のビュー モデルにバインドするにはどうすればよいでしょうか?