WPF 中的选择性双命令绑定转换器?
Posted
技术标签:
【中文标题】WPF 中的选择性双命令绑定转换器?【英文标题】:a selective dual command binding converter in WPF? 【发布时间】:2011-02-19 14:47:10 【问题描述】:我首先要说我的 WPF 应用程序没有使用 MVVM 模式。请原谅我。
现在我有一个带有两个按钮的数据模板,每个按钮都绑定到该数据模板所代表的 CLR 对象上的不同命令。两者都使用相同的命令参数。这是按钮的示例。
<Button x:Name="Button1"
Command="Binding Path=Command1"
CommandParameter="Binding Path=Text, ElementName=TextBox1"
/>
<Button x:Name="Button2"
Command="Binding Path=Command2"
CommandParameter="Binding Path=Text, ElementName=TextBox1"
/>
我想将其重构为一个按钮,该按钮可以根据用户设置(如 Settings.settings 中的布尔值)执行任一命令。我无权重构 CLR 对象本身。这也是一个数据模板,没有代码隐藏供我使用。我的看法是转换器将是最好的选择,但我不知道如何将它们组合在一起。
转换器需要接受 CommandParameter 以及 DataContext,以便知道要在哪个对象上执行命令。
有人可以帮我解决这个问题吗?提前致谢。
【问题讨论】:
【参考方案1】:快速而肮脏的解决方案 - 将两个按钮放在表单上并将它们的可见性绑定到 bool 的值(显然是一个否定) - 这样只会显示有效的按钮。
但是,如果您确实想使用转换器,我倾向于在命令绑定上使用它,传入 CLR 对象和布尔值,并允许它返回要绑定的正确命令。我认为没有理由传入命令参数,因为无论哪种方式都是一样的。
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 只是在应用程序设置中,您可以直接在转换器中使用它,并且只使用普通的单值转换器。不是很好的设计,因为它应该真正独立,但可以完成工作。
【讨论】:
以上是关于WPF 中的选择性双命令绑定转换器?的主要内容,如果未能解决你的问题,请参考以下文章
wpf命令的好处,直接用方法不行吗?搞的跟dos一样,感觉很奇特