我需要一些帮助,希望你能帮助我。我有一个复杂的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的简单方法?
感谢您的帮助。
蒂莫
答案 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的按钮。