0

我需要一些帮助,我希望你能帮助我。我有一个复杂的用户控件,其方法可以更改内部所有元素的颜色。当我尝试将它与 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?

谢谢你的帮助。

蒂莫

4

2 回答 2

0

好的,我按照您描述的后一种方式进行了尝试(“Button”是我想用来触发该方法的 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}}}" />

但同样,什么也没有发生。

要正确理解您的第一个建议,我必须将我的自定义控件声明为按钮而不是用户控件?我不明白,我必须把数据上下文的东西放在哪里。我只是使用标准的 wpf 按钮来触发自定义控制方法。我没有可以在其中声明数据上下文的按钮的任何类。

于 2013-06-25T07:26:09.293 回答
0

如何解决您的绑定问题。首先,大多数绑定都与最具体的DataContext. 意味着,你必须这样设置你的控制。例如

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

有了这个,你可以绑定在MySpecialButton.

另一种可能性是使用具有相对源的绑定。例如

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

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

希望这对您有所帮助。

于 2013-06-25T06:16:31.313 回答