2013-06-24 5 views
0

Мне нужна помощь, и я надеюсь, что вы можете мне помочь. У меня есть сложный usercontrol с методом, который изменяет цвет всех элементов внутри. Когда я пытаюсь подключить его с помощью заглушки метода в MainWindow-Code-behind, я могу легко запустить его. Я хочу использовать MVVM в будущем, так что теперь я хочу подключить его к кнопке в главном окне с помощью команд.Использование команд для запуска метода usercontrol

Так вот мой 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 У меня есть простая кнопка и UserControl.

<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}"/> 

Я хочу, чтобы запустить UC-метода в OnExecute() - метод, но я не в состоянии выбрать «testUC», потому что он не доступен в этом контексте.

Есть ли простой способ запуска UC-Методов посредством связывания команд?

Спасибо за любую помощь.

Timo

+0

Поскольку цвета являются визуальным внешним видом, нет причин поместить эту логику в виртуальную машину. Таким образом, вы можете придерживаться своего подхода, если вы сможете его запустить. – DHN

+0

Спасибо за ваш ответ. Это даже не цвет, он используется для смещения и других методов. Я хочу запустить его с помощью кнопки devexpress-ribbonbutton (без каких-либо щелчков или похожих событий), поэтому мне нужен командный путь. – csharper1981

+0

Похоже, вы внедряете 'CustomControl'. Обычно вы реализуете такие вещи в коде, который находится за элементом управления. Тем не менее, вы можете использовать подход «ICommand», привязавшись к элементу управления. – DHN

ответ

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 с помощью метода в приведенном выше примере.

Надеюсь, это вам поможет.

+0

Эй. Еще раз спасибо. Я дам ему попытку и дам вам знать, как это работает. – csharper1981

0

Хорошо, я попробовал это, как вы описали («Кнопка» - это кнопка, которую я хочу использовать для запуска метода, «NewPlate» - это имя метода, а exte: plate - тип customcontrol):

<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.

Смежные вопросы