有没有办法从xaml调用外部函数?

时间:2010-10-19 11:53:01

标签: wpf xaml resources methods call

有没有办法直接从xaml调用外部对象的方法(例如资源对象)?

我的意思是这样的:

<Grid xmlns:dm="clr-namespace:MyNameSpace;assembly=MyAssembly">
    <Grid.Resources>
      <dm:TimeSource x:Key="timesource1"/>
    </Grid.Resources>

    <Button Click="timesource_updade">Update time</Button>
</Grid>

方法timesource_update当然是TimeSource对象的方法。

我需要使用纯XAML,而不是任何代码。

2 个答案:

答案 0 :(得分:3)

检查this帖子,它有类似的问题。通常,您无法直接从xaml调用方法。 您可以使用命令,也可以从xaml创建一个对象,该对象将在线程上创建一个方法,该方法将在需要时自行处理。

但我担心你不能只在纯XAML中做到这一点。在C#中,你可以做你在XAML中可以做的所有事情,但不是其他方式。你只能从XAML做一些你可以在C#中做的事情。

答案 1 :(得分:3)

好的,这是最后的溶剂。

XAML:

    <Grid xmlns:dm="clr-namespace:MyNameSpace;assembly=MyAssembly">
        <Grid.Resources>
          <dm:TimeSource x:Key="timesource1"/>
        </Grid.Resources>

        <Button Command="{x:Static dm:TimeSource.Update}" 
                CommandParameter="any_parameter" 
                CommandTarget="{Binding Source={StaticResource timesource1}}">Update time</Button>
    </Grid>

TimeSource类中的CODE:

public class TimeSource : System.Windows.UIElement {

  public static RoutedCommand Update = new RoutedCommand();

  private void UpdateExecuted(object sender, ExecutedRoutedEventArgs e)
  {
      // code
  }

  private void UpdateCanExecute(object sender, CanExecuteRoutedEventArgs e)
  {
      e.CanExecute = true;
  }

  // Constructor
  public TimeSource() {

    CommandBinding cb = new CommandBinding(TimeSource.Update, UpdateExecuted, UpdateCanExecute);
    CommandBindings.Add(cb2);
  }
}

TimeSource必须从UIElement派生才能拥有CommandBindings。但结果是直接从XAML调用外部汇编方法。通过单击按钮,调用对象timesource1的'UpdateExecuted'方法,这正是我正在寻找的。