Jens Svensson
Jens Svensson

Reputation: 19

View model does not bind correctly C#

I have one class names BrowseViewModel and one class named BrowseDialog i want the BrowseViewModel to be binded to the BrowseDialog but when i write a binding to my Click command on one of my buttons i get an error the second i start the program this is my code.

BrowseDialog.xaml

<Window x:Class="TextalkApi.BrowseDialog"
        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:TextalkApi"
        mc:Ignorable="d"
        Title="BrowseDialog" Height="248.361" Width="427.459">
    <Grid>
        <Button Content="Browse" HorizontalAlignment="Left" Margin="267,11,0,0" VerticalAlignment="Top" Width="75"/>
        <TextBox x:Name="FileDialog" HorizontalAlignment="Left" Height="23" Margin="10,10,0,0" TextWrapping="Wrap" Text="{Binding webUrl}" VerticalAlignment="Top" Width="244"/>
        <Button Content="Save" HorizontalAlignment="Left" Margin="267,166,0,0" VerticalAlignment="Top" Width="75" Click="{Binding SaveCommand}" />
        <TextBox HorizontalAlignment="Left" Height="23" Margin="10,38,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>

    </Grid>
</Window>

BrowseViewModel

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;
using System.Threading;
using System.Threading.Tasks;
using System.Configuration;
using System.Collections.Specialized;
using System.IO;

namespace Data
{
    public class BrowseViewModel : BaseViewModel
    {


        #region public variables
        public string webUrl { get; set; } 





        #endregion


        #region Public Commands
        public ICommand SaveCommand { get; set; }
        #endregion

        #region Constructor
        public BrowseViewModel()
        {



            this.SaveCommand = new RelayCommand(SaveFilePath);
        }
        #endregion

        #region Private methods
        private void SaveFilePath()
        {
            if (File.Exists(webUrl))
            {
                ConfigurationManager.AppSettings.Add("WebUrl", webUrl);
            }
            else
            {

            }



        }



        #endregion







    }
}

BrowseDialog.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.IO;
using Data;

namespace TextalkApi
{
    /// <summary>
    /// Interaction logic for BrowseDialog.xaml
    /// </summary>
    public partial class BrowseDialog : Window
    {
        public BrowseDialog()
        {
            InitializeComponent();
            this.DataContext = new BrowseViewModel();
        }


    }
}

the error is System.Windows.Markup.XamlParseException

Upvotes: 1

Views: 63

Answers (1)

Miamy
Miamy

Reputation: 2299

The problem is in line

<Button Content="Save" HorizontalAlignment="Left" Margin="267,166,0,0" VerticalAlignment="Top" Width="75" Click="{Binding SaveCommand}" />

in your xaml.

You shouldn't bind Click property to the command, use Command="{Binding SaveCommand}" instead.

Upvotes: 4

Related Questions