我不確定您是否可以在沒有任何事件處理的情況下利用互斥性。通常我有MenuItems或按鈕組的問題,我的方法是使用一個EqualityConverter的Multibindings,例如
<Setter Property="IsChecked">
<Setter.Value>
<MultiBinding Converter="{StaticResource EqualityComparisonConverter}" Mode="OneWay">
<!-- This binding should find your VM and bind to your property -->
<Binding RelativeSource="{RelativeSource AncestorType=Window}"
Path="DataContext.SelectedName"/>
<!-- Binds to the item being templated -->
<Binding />
</MultiBinding>
</Setter.Value>
</Setter>
A轉換器(它不是很安全,會拋出異常,如果其中一個值是零,可能要提高它):
public class EqualityComparisonConverter : IMultiValueConverter
{
#region IMultiValueConverter Members
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values.Length < 2) throw new Exception("At least two inputs are needed for comparison");
bool output = values.Aggregate(true, (acc, x) => acc && x.Equals(values[0]));
return output;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
#endregion
}
其實這是有點神祕的對我怎麼樣,即使作品(考慮結合是單向的)...
想過這個,但不是我最喜歡的選項 – nick 2011-04-18 17:16:44