假设我有要在XAML中引用的类。
public class MyConverter
{
public static readonly MyConverter Default = new MyConverter();
...
};
然后在XAML中我可以引用它
<Label Content="{Binding Text,Converter={x:Static local:MyConverter.Default}"/>
或
<local:MyConverter x:Key="MyConverter"/>
...
<Label Content="{Binding Text,Converter={StaticResource local:MyConverter}"/>
哪种方式更有效?
答案 0 :(得分:2)
我怀疑这里的任何东西都会比其他东西更有效,但这里的关键区别在于实际发生的事情:
MyConverter
MyConverter
的实例并使用它。 我相信第一个人可能会更快地结合百分比(或者你的意思是效率是多少?)但是这种差异不会给你带来多少利润。如果你已经有一个静态字段,我会选择#1选项。此外,据我所记得,x:Static
仍然无法在Silverlight中使用。
答案 1 :(得分:1)
我发现第一个选项很有趣,因为它提供了一个很好的方法,可以将类用于与单例结合使用的任务的不同变体。想象这样的可见性值转换器:
public class VisibilityConverter : IValueConverter
{
private static readonly VisibilityConverter defaultInstance = new VisibilityConverter();
public static VisibilityConverter Default = new VisibilityConverter();
public static VisibilityConverter InverseBoolean = new VisibilityConverter() { Inverse = true };
public bool Inverse { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var isVisible = value != null
&& value.GetType() == typeof(bool)
&& (bool)value;
if (Inverse)
{
isVisible = !isVisible;
}
return isVisible ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;
}
然后可以轻松地以默认和反向模式使用它:
Converter={x:Static converters:VisibilityConverter.Default}
Converter={x:Static converters:VisibilityConverter.InverseBoolean}