Проблема с TwoWay Binding в приложении для Windows Phone 8.1, MVVM

Я разрабатываю приложение для базовой системы продаж с использованием MVVM , но у меня проблемы с сохранением данных, которые вводятся из вида.

Представление:

 
    
    
    
    

Представление использует команду SaveProduct для сохранения данных, введенных в представление, и вызывается из:

        

Я установил свой DataContext из файла представления CS:

public AddProduct()
    {
        InitializeComponent();
        DataContext = new ProductListViewModel();
    }

ProductListViewModel :

namespace BillingShop.ViewModel
{
    public class ProductListViewModel : ViewModelBase, INavigable
    {
        public ObservableCollection Items { get; private set; }
    private DelegateCommand _saveProduct;
    public bool IsUpdating { get; set; }
    public ProductViewModel Product { get; set; }
    public Visibility UpdatingVisibility => (IsUpdating || Items == null || Items.Count == 0) ? Visibility.Visible : Visibility.Collapsed;

    public ProductListViewModel()
    {
        if (IsInDesignMode)
        {
            return;
        }
        _saveProduct = new DelegateCommand(SaveCommand_Executed);
    }

    #region Product Members

    private string _unit;
    public string SelectedUnit
    {
        get { return _unit; }
        set
        {
            _unit = value;
            OnPropertyChanged();
        }
    }

    #endregion


    public IEnumerable UnitsSource => Enum.GetValues(typeof(RegisteredUnits)).Cast();

    public ICommand SaveCommand => _saveProduct;

    private void SaveCommand_Executed()
    {
        var product = new Product
        {
            Name = Product.Name,
            Unit = Product.Unit,
            Cost = Convert.ToDouble(Product.Cost),
            Price = Convert.ToDouble(Product.Price),
            Active = Convert.ToBoolean(Product.Active)
        };
        ProductManager.SaveProduct(product);
    }

    public void PopulateProductViewModel(ProductViewModel entry)
    {
        Product = entry;
        OnPropertyChanged("Product");
    }
    public Product GetProduct()
    {
        return Product?.GetProduct();
    }
}

}

ProductViewModel :

public class ProductViewModel : ViewModelBase
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Unit { get; set; }
    public double Cost { get; set; }
    public double Price { get; set; }
    public bool Active { get; set; }
    public List SalesDetail { get; set; }

    public ProductViewModel()
    {
    }

    public ProductViewModel(Product item)
    {
        Update(item);
    }
    public void Update (Product item)
    {
        Id = item.ID;
        Name = item.Name;
        Unit = item.Unit;
        Cost = item.Cost;
        Price = item.Price;
        Active = item.Active;
        SalesDetail = item.SalesDetail;
    }

    public Product GetProduct()
    {
        return new Product
        {
            ID = Id,
            Name = Name,
            Unit = Unit,
            Cost = Cost,
            Price = Price,
            Active = Active,
            SalesDetail = SalesDetail
        };
    }
}

При выполнении команды SaveProduct класс Product отображается как null Насколько я понимаю, значения, введенные из представления в этом классе, не были сохранены.

Я понимаю, что Mode = TwoWay допускает двунаправленную привязку, поэтому следует ли сохранять значения, или я ошибаюсь?

Я заранее благодарю всех за ответ и оставляю вручную публичный репозиторий на случай, если кто-нибудь захочет просмотреть код более подробно. https://github.com/adoibarra/BillingShop

1
задан 04.04.2016, 07:22
1 ответ

Пробуй инициализируя свойство Product внутри строителя ProductListViewModel

public class ProductListViewModel
{
   public ProductListViewModel ()
   {
      Product = new ProductViewModel();
   }
   .
   .
   .
}
1
ответ дан 24.11.2019, 14:38
  • 1
    Большое спасибо, мне не хватало этого... Ты спас мне жизнь jajaja. Крепкое объятие... – Adolfo F. Ibarra Landeo 04.04.2016, 18:08