tags:

views:

14

answers:

1

Hi New to wpf and through a learning curve. I have a userControl with a Toolbar Save Button and a TextBox. What I am trying to achieve is as follows

When I press the save Button in the toolbar I should record in the textbox that I am about to save and that I have saved the customer (CustomerView UserControl) I seem to have 2 problems

1) that the SaveCommand is not hooked I thought I had hooked it

2) is not writing the action to the textbox.

Could you tell me where I am going wrong? Thanks a lot!!!

MainWindow.xaml

<Window x:Class="MyCompany.CustomerStore.MainWindow"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:view="clr-namespace:MyCompany.CustomerStore.Views"
      Title="MainWindow" Height="350" Width="525">
   <Grid>
       <view:CustomerView></view:CustomerView>
   </Grid>

  CustomerView.xaml


    <UserControl x:Class="MyCompany.CustomerStore.Views.CustomerView"
          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" 
          mc:Ignorable="d" 
          d:DesignHeight="300" d:DesignWidth="300">
   <Grid>
       <DockPanel LastChildFill="True">
           <ToolBar DockPanel.Dock="Top">
               <Button Command="{Binding Path=SaveCommand}">Save</Button>
           </ToolBar>
           <TextBox Name="txtPrintAction" Text="{Binding CustomerLog, Mode=TwoWay}"></TextBox>
       </DockPanel>
   </Grid>

  CustomerModel.cs


 public class CustomerModel
  {
      public string FirstName { get; set; }
      public string LastName { get; set; }
      public string CustomerLog { get; set; }
  }

  CustomerViewModel.cs

  public class CustomerViewModel:WorkspaceViewModel,ICustomerViewModel
  {
      readonly CustomerModel _customerModel;

      RelayCommand _saveCommand;

      public CustomerViewModel(CustomerModel customer)
      {
          _customerModel = customer;
      }
      public string FirstName
      {
          get { return _customerModel.FirstName; }
          set
          {                 
              _customerModel.FirstName = value;
              base.OnPropertyChanged("FirstName");
          }
      }
      public string LastName
      {
          get { return _customerModel.LastName; }
          set
          {
              _customerModel.LastName = value;
              base.OnPropertyChanged("LastName");
          }
      }
      public string CustomerLog
      {
          get { return _customerModel.CustomerLog; }
          set
          {
              _customerModel.CustomerLog = value;
              base.OnPropertyChanged("CustomerLog");
          }
      }
      public ICommand SaveCommand
      {
          get
          {
              if (_saveCommand == null)
              {
                  _saveCommand = new RelayCommand(param => Save(), param => CanSave);
              }
              return _saveCommand;
          }
      }

      private  void Save()
      {
          AppendToLog("I am about to save");

          //Pretend we have saved the customer

          AppendToLog("CustomerSaved");
      }

      internal void AppendToLog(string text)
      {
          _customerModel.CustomerLog += text + Environment.NewLine; ;
          OnPropertyChanged("CustomerLog");
      }

      static bool CanSave
      {
          get
          {
              return true; 
          } 
      }
A: 

Where do you declare a relationship between the view

x:Class="MyCompany.CustomerStore.Views.CustomerView

and the model class CustomerViewModel?

I don't see that anywhere.

I think you need to set the DataContext of the View to the Model.

Kevin Mills
sorry for late reply.Yes DataContext was the problem thanks for pointing it out.