我正在尝试将具有Source属性的XmlDataProvider绑定到另一种形式的静态函数。
这是XmlDataProvider行 -
<XmlDataProvider x:Key="Lang" Source="/lang/english.xml" XPath="Language/MainWindow"/>
我希望将Source属性绑定到一个名为“GetValue_UILanguage”的静态函数,其形式称为:“Settings”
先谢谢了,
锭。
答案 0 :(得分:1)
有关允许您绑定到方法的转换器,请参阅this question's answer。
您可以修改它以便能够访问任何类的静态方法。
编辑:这是一个修改过的转换器,应该通过反射找到方法。
(注意:最好使用markup extension,因为实际上并没有绑定任何值。)
public sealed class StaticMethodToValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
try
{
var methodPath = (parameter as string).Split('.');
if (methodPath.Length < 2) return DependencyProperty.UnsetValue;
string methodName = methodPath.Last();
var fullClassPath = new List<string>(methodPath);
fullClassPath.RemoveAt(methodPath.Length - 1);
Type targetClass = Assembly.GetExecutingAssembly().GetType(String.Join(".", fullClassPath));
var methodInfo = targetClass.GetMethod(methodName, new Type[0]);
if (methodInfo == null)
return value;
return methodInfo.Invoke(null, null);
}
catch (Exception)
{
return DependencyProperty.UnsetValue;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException("MethodToValueConverter can only be used for one way conversion.");
}
}
用法:
<Window.Resources>
...
<local:StaticMethodToValueConverter x:Key="MethodToValueConverter"/>
...
</Window.Resources>
...
<ListView ItemsSource="{Binding Converter={StaticResource MethodToValueConverter}, ConverterParameter=Test.App.GetEmps}">
...
App类中的方法:
namespace Test
{
public partial class App : Application
{
public static Employee[] GetEmps() {...}
}
}
我对此进行了测试并且它有效,但使用完整的类路径非常重要,仅App.GetEmps
就不起作用。