Yusuf
Yusuf

Reputation: 491

WPF - DataBinding (Command is not being executed)

I am writing a WPF application where I wish to implement the MVM pattern. My code is currently set up like this:

This is my view model class where I am exposing the command I wish to be executed as a property

```

    public HomeScreenViewModel(NavigationService mw)
    {
        this.mw = mw;
    }

    private RelayCommand _addStudent;
    public ICommand AddStudent
    {
        get
        {
            if (_addStudent == null)
            {
                _addStudent = new RelayCommand(param => this.OpenNewStudents(), param => true);
            }
            return _addStudent;
        }
    }

This is my xaml containing the layout of the corresponding view

<Page x:Class="test.HomeScreen"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  xmlns:local="clr-namespace:test"
  mc:Ignorable="d" 
  d:DesignHeight="450" d:DesignWidth="1300"
  Title="HomeScreen">
<WrapPanel VerticalAlignment="Center" HorizontalAlignment="Center">
    <WrapPanel HorizontalAlignment="Center" Height="300" Margin="0,0,0,0" VerticalAlignment="Center" Width="1300">
    <Button Content="AddStudent" Command="{Binding AddCommand}"  Style="{StaticResource ButtonStyle}" />
    <Button Content="AddStudent" Style="{StaticResource ButtonStyle}" />
    <Button Content="AddStudent" Style="{StaticResource ButtonStyle}" />
    <Button Content="AddStudent" Style="{StaticResource ButtonStyle}" />
    <Button Content="AddStudent" Style="{StaticResource ButtonStyle}" />
    <Button Content="AddStudent" Style="{StaticResource ButtonStyle}" />
    <Button Content="AddStudent" Style="{StaticResource ButtonStyle}" />
    <Button Content="AddStudent" Style="{StaticResource ButtonStyle}" />
    <TextBox Text="{Binding Path=HI}" Width="200" Height="200"/>
    </WrapPanel>
<Canvas Margin="350, 100,0, 0" Height="300" Width="1350" VerticalAlignment="Center" HorizontalAlignment="Center">
        <Image Source="Logo.PNG"/>
    </Canvas>
</WrapPanel>

I have set the command of the top button using the binding syntax in the WrapPanel.

This HomeScreen page is linked from a naviagation window and is the source of the navigation window (xaml file):

<NavigationWindow x:Class="test.MainWindow"
    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:local="clr-namespace:test"
    mc:Ignorable="d"
    Title="School Management App" Height="350" Width="1250"
    Source="HomeScreen.xaml">
 </NavigationWindow>

I have my HomeScreen view constructor set like this:

public partial class HomeScreen : Page
{
    public HomeScreen()
    {
        InitializeComponent();
        this.DataContext = new HomeScreenViewModel(this.NavigationService);
    }
}

My infrastructure is set up as I have described above and my implementation of relay command is taken from this site https://msdn.microsoft.com/en-us/magazine/dd419663.aspx.

When I run my application and I press the corresponding button, nothing happens. I was wondering if someone could help me figure out what is wrong and why the command binding isn't working. It would be much appreciated, thanks :)

as a side note, could someone give me some tips on what the best way to debug wpf applications and figure out what bindings exist at run time.

Thanks :)

Upvotes: 0

Views: 43

Answers (1)

notacat
notacat

Reputation: 691

your command name is AddStudent, but you use AddCommand in xaml. Just correct the name: Command="{Binding AddStudent}"

Upvotes: 4

Related Questions