Быстрое и грязное решение - поместите обе кнопки в форму и свяжите их видимость со значением bool (очевидно, одна отрицательная) - так будет показана только действительная кнопка.
Однако если вы хотите использовать конвертер, я склонен использовать его при связывании команд, передать объект CLR и значение bool и разрешить ему возвращать правильную команду для привязки. Я не вижу причин для передачи параметра команды, поскольку в любом случае это будет то же самое.
XAML:
<Resources>
<controls:CommandConverter x:Key="CommandConverter"/>
</Resources>
<Button x:Name="Button"
CommandParameter="{Binding Path=Text, ElementName=TextBox1}">
<Button.Command>
<MultiBinding Converter="{StaticResource CommandConverter}">
<MultiBinding.Bindings>
<Binding /><-- the datacontext CLR object -->
<Binding ... /><-- Application setting (however you intend to get that in)
</MultiBinding.Bindings>
</MultiBinding>
</Button.Command>
</Button>
Код:
public class CommandConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
CommandObject clrObject= (CommandObject)values[0];
bool setting = (bool)values[1];
if (setting)
{
return clrObject.Command1;
}
return clrObject.Command2;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
На самом деле, если параметр bool находится только в настройках приложения, вы могли бы просто использовать его непосредственно в преобразователе и использовать только обычный преобразователь с одним значением. Не очень хороший дизайн, потому что он действительно должен стоять в одиночестве, но он справится с работой.