代码背后的XAML访问方法

时间:2010-12-23 19:12:32

标签: c# wpf xaml code-behind

  

可能重复:
  Bind to a method in WPF?

是否有一种简单的方法可以在XAML中使用我的代码来访问方法?

我见过使用ObjectDataProvider的解决方案,但据我了解,他们创建了一个给定类型的新实例并调用了该对象的方法。这对我来说没用,因为我需要调用我的类的实际代码(datacontext对于方法很重要!)...

Route.xaml.cs: public string GetDifficultyName(int id);

Route.xaml: Displays a list of routes

每个路由都有一个属性“DiffId”,必须将其传递给上面的方法,并且必须将结果设置为文本框的值 - >将id解析为人类可读的描述。

1 个答案:

答案 0 :(得分:1)

执行此操作的一种简单方法是将ValueConverter实例公开为Window(或Control或其他)中的资源,该资源已在您的代码隐藏中正确初始化以便调用进入你需要的方法。

例如:

[ValueConversion(typeof(object), typeof(string))]
public class RouteDifficultyNameConverter : IValueConverter
{
    private readonly IMyMethodProvider provider;

    public RouteDifficultyNameConverter(IMyMethodProvider provider)
    {
        this.provider = provider;
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return provider.GetDifficultyName((int)value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }

当然,这不是一个完全正确的转换器,但你明白了。

在你的代码隐藏构造函数中:

    this.Resources.Add("routeDifficultyConverter",
                       new RouteDifficultyNameConverter(this));
    this.InitializeComponent();