使用命令触发usercontrol方法

时间:2013-06-24 10:36:00

标签: c# wpf wpf-controls

我需要一些帮助,希望你能帮助我。我有一个复杂的usercontrol,其方法可以更改内部所有元素的颜色。当我尝试将它与MainWindow-Code-behind中的方法存根连接时,我可以轻松启动它。我希望将来使用MVVM,所以现在我想通过命令将它连接到主窗口中的按钮。

所以这是我的ViewModel和我的MainWindow.cs

public class ViewModel
{ 
    public DelegateCommands TestCommand { get; private set; }

    public ViewModel()
    {
        TestCommand = new DelegateCommands(OnExecute, CanExecute);

    }

    bool CanExecute(object parameter)
    {
        return true;
    }

    void OnExecute()
    {

        //testUC.NewColor(); HERE I WANT TO START THE UC-METHOD
    }
}




 public partial class MainWindow : Window
{
    ViewModel _ViewModel = null;
    public plate tplate;

    public MainWindow()
    {
        InitializeComponent();

        _ViewModel = new ViewModel();


    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        tplate = new plate();
    }
}

在我的MainWindow-View上,我有一个简单的按钮和用户控件。

<exte:plate x:Name="testUC" Grid.Column="1"/>
<Button Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="43,247,0,0" Command="{Binding TestCommand}"/>

我想在OnExecute() - Method中启动UC-Method但是我无法选择“testUC”,因为它在此上下文中不可用。

有没有一种通过命令绑定启动UC-Methods的简单方法?

感谢您的帮助。

蒂莫

2 个答案:

答案 0 :(得分:0)

如何解决你的绑定问题。首先,大多数绑定与最具体的DataContext相关。意思是,你必须设置你的控制。 E.g。

public class MySpecialButton : Button
{
    public MySpecialButton()
    {
        DataContext = this; // there are other possibilties, but this is the easiest one
    }
}

使用此功能,您可以绑定MySpecialButton中实现的每个命令。

另一种可能性是使用具有相对来源的绑定。 E.g。

<Button Command="{Binding TheCmd, RelativeSource={AncestorType={x:Type MySpecialButton}}}" />

您甚至可以使用上面示例中的方法声明DataContext

希望这会对你有所帮助。

答案 1 :(得分:0)

好的,我按照你描述的后一种方式尝试了它(“Button”是我想用来触发方法的按钮,“NewPlate”是方法名,而exte:plate是customcontrol-type):

<Button Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="43,247,0,0" Command="{Binding NewPlate, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type exte:plate}}}" />

但是,没有任何反应。

要正确理解您的第一个建议,我必须将自定义控件声明为按钮而不是用户控件?我不明白,我必须放置datacontext的东西。我只是使用标准的wpf按钮来触发自定义控制方法。我没有任何类可用于声明datacontext的按钮。