ViewModel に、ToggleButton がバインドされているプロパティの否定である読み取り専用プロパティを設定するだけです。
ビューモデル:
private Boolean mSourceIsPicked;
public Boolean SourceIsPicked
{
get { return mSourceIsPicked; }
set
{
SetProperty("SourceIsPicked", ref mSourceIsPicked, value);
NotifyPropertyChanged("IsSourceChangeable");
}
}
public Boolean IsSourceChangeable
{
get { return ! this.SourceIsPicked; }
}
次に、ビューで、他のコントロールの IsEnabled プロパティをその新しいプロパティにバインドします。
<ComboBox ItemsSource="{Binding SourceTypes}"
IsEnabled={Binding IsSourceChangeable}" />
プロパティにバインドする利点は、ビューでコントロールを追加/削除し、追加の XAML を変更せずにこのプロパティにバインドできることです。このプロパティにバインドしないことで、任意のコントロールの動作を変更することもできます。
本当に XAML のみのソリューションが必要な場合は、パネル内の各コントロールに名前を付け、"SourceIsPicked" プロパティで TargetName を使用して DataTrigger を使用して、他のコントロールを無効にすることができます。
<ComboBox x:Name="cboSourceTypes" ... />
<ComboBox x:Name="cboSourceNames" ... />
<ToggleButton>
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Style.Triggers>
<DataTrigger Binding="{Binding SourceIsPicked}" Value="True">
<Setter TargetName="cboSourceTypes"
Property="IsEnabled"
Value="False" />
<Setter TargetName="cboSourceNames"
Property="IsEnabled"
Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
これはすべてフリーハンドであるため、少し調整する必要があるかもしれませんが、アイデアが得られることに注意してください。