Как вызвать команду делегата из всплывающего окна.
Я показываю всплывающее окно над окном..
Во всплывающем окне есть кнопка, которой нужно вызвать DelegateCommand
из ViewModel.
Ниже приведен код для окна > MyPopUp.xaml.cs.
public partial class MyPopUp : Window
{
public MyPopUp(){
InitializeComponent();
}
}
Ниже приведен код для ViewModel > > MyPopUpViewModel.cs
public class MyPopUpViewModel: BindableBase
{
public MyPopUpViewModel()
{
AddCommand = new DelegateCommand(AddCommandCall);
}
private void AddCommandCall()
{
/// Command call Code here
}
public DelegateCommand AddCommand { get; private set; }
}
Код MyPopUp.xaml здесь
<Window x:Class = "Project"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i = "clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:local = "clr-namespace:Project.PopUpControls"
xmlns:system = "clr-namespace:System;assembly=mscorlib"
xmlns:prism = "http://prismlibrary.com/"
mc:Ignorable = "d"
Title = "Create Levels" Height = "700" Width = "900"
prism:ViewModelLocator.AutoWireViewModel = "True">
<Grid>
<Button
Command = "{Binding DataContext.AddCommand}"
Content = "test"
Margin = "0,5,0,0"
FontSize = "16"
FontWeight = "Normal"
Width = "100"
HorizontalAlignment = "Center"
HorizontalContentAlignment = "Center"
VerticalAlignment = "Top"
VerticalContentAlignment = "Center"
Foreground = "#ffffff"
Background = "#4e4e4e"/>
</Grid>
Хотя при вызове InitializeComponent();
в MyPopUp.xaml.cs окно Контекст данных получает все команды в нем из MyPopUpViewModel.cs
Затем при нажатии на кнопку во всплывающем окне... Он должен вызвать команду Добавить команду, но она не вызывается.
Дайте мне знать, что мне не хватает или что-то нужно добавить/изменить.
Заранее спасибо.
Столько времени копался в wpf и пробовал какую-то альтернативу.. я получил ответ Command = "{Binding Path=DataContext.AddCommand,RelativeSource = {RelativeSource AncestorType=Window}}"
<Grid>
<Button
Command = "{Binding Path=DataContext.AddCommand,RelativeSource = {RelativeSource AncestorType=Window}}"
Content = "test"
Margin = "0,5,0,0"
FontSize = "16"
FontWeight = "Normal"
Width = "100"
HorizontalAlignment = "Center"
HorizontalContentAlignment = "Center"
VerticalAlignment = "Top"
VerticalContentAlignment = "Center"
Foreground = "#ffffff"
Background = "#4e4e4e"/>
Я не вижу в вашем коде или в xaml вызов вашей модели представления. Возможно, я ошибаюсь, но для меня вам нужно вызвать после InitializeComponent() в отделенном коде ==> DataContext = new MyPoPupViewModel()!
Xaml-вызов:
xmlns:local = "clr-namespace:YourApplication"
<Window.DataContext>
<local:MyPoPupViewModel/>
</Window.DataContext>
Это очень странно... на самом деле это не программный код, а конструктор!! Так что назовите это в .xaml: <Window.DataContext> <local:MyPopupViewModel/> </Window.DataContext>
Установите DataContext для просмотра
InitializeComponent();
DataContext = new MyPopUpViewModel();
Спасибо за ваш ответ.. Здесь компания следует правилу, что не писать код программной части,,,
затем вы можете использовать VoewModel Locator для установки DataContext
Спасибо за ваш ответ.. Здесь компания следует правилу, что не писать код программной части,,,