有没有办法直接从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,而不是任何代码。
答案 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'方法,这正是我正在寻找的。 p>