Приложение Wpf с MVVM
Добрый вечер всем, я хочу разработать простое приложение для понимания архитектуры MVVM с помощью WPF. Я просто хочу вставить текст, введенный в текстовое поле, введенное в listview при нажатии кнопки Добавить.
Я создаю две папки, которые являются шаблоном и ViewModel, и вот вставка исходного кода для каждого файла, зная, что я использую расширение MVVMLightToolkit.
Я не понимаю, почему он показывает меня в первой строке listviewArticleManagement.Модель.Статья? и как я могу решить эту проблему?
Что я уже пробовал:
для папки шаблона:
Статьи.в CS
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace GestionArticle.Model { public class Article { private string _nom; public string Nom { get { return _nom; } set { _nom = value; } } } }
и для папки ViewModel:
IMainViewModel.в CS
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Windows.Input; using GestionArticle.Model; namespace GestionArticle.ViewModel { public interface IMainViewModel { string Titre { get; set; } ObservableCollection<Article> Articles { get; } ICommand ChargerArticleCommand { get; } } }
MainViewModel.в CS
using GalaSoft.MvvmLight; using System.Collections.ObjectModel; using GestionArticle.Model; using GalaSoft.MvvmLight.Command; using System.Windows.Input; namespace GestionArticle.ViewModel { /// <summary> /// This class contains properties that a View can data bind to. /// <para> /// See http://www.galasoft.ch/mvvm /// </para> /// </summary> public class MainViewModel : ViewModelBase, IMainViewModel { /// <summary> /// Initializes a new instance of the MainViewModel class. /// </summary> private readonly ObservableCollection<Article> article; public MainViewModel() { article = new ObservableCollection<Article>(); article.Add(new Article { Nom = "article 1" }); ChargerArticleCommand = new RelayCommand(ChargerArticles); } private void ChargerArticles() { this.article.Add(new Article { Nom = "Article 2" }); } private string _titre; public string Titre { get { return _titre; } set { _titre = value; RaisePropertyChanged("Titre"); } } public ObservableCollection<Article> Articles { get { return this.article; } } public ICommand ChargerArticleCommand { get; private set; } } }
ViewModelLocator.в CS
/* In App.xaml: <Application.Resources> <vm:ViewModelLocator xmlns:vm="clr-namespace:GestionArticle.ViewModel" x:Key="Locator" /> </Application.Resources> In the View: DataContext="{Binding Source={StaticResource Locator}, Path=ViewModelName}" */ using GalaSoft.MvvmLight; using GalaSoft.MvvmLight.Ioc; using Microsoft.Practices.ServiceLocation; namespace GestionArticle.ViewModel { /// <summary> /// This class contains static references to all the view models in the /// application and provides an entry point for the bindings. /// <para> /// See http://www.galasoft.ch/mvvm /// </para> /// </summary> public class ViewModelLocator { static ViewModelLocator() { ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); SimpleIoc.Default.Register<IMainViewModel, MainViewModel>(); } public static IMainViewModel MainVM { get { return ServiceLocator.Current.GetInstance<IMainViewModel>(); } } /// <summary> /// Gets the Main property. /// </summary> [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Justification = "This non-static member is needed for data binding purposes.")] /* public MainViewModel Main { get { return ServiceLocator.Current.GetInstance<MainViewModel>(); } }*/ public static void CleanMain() { SimpleIoc.Default.Unregister<IMainViewModel>(); SimpleIoc.Default.Register<IMainViewModel, MainViewModel>(); } public static void Cleanup() { CleanMain(); } } }
Приложение.язык XAML
<Application x:Class="GestionArticle.App" 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:viewModel="clr-namespace:GestionArticle.ViewModel" StartupUri="MainWindow.xaml" mc:Ignorable="d"> <Application.Resources> <!--Global View Model Locator--> <viewModel:ViewModelLocator x:Key="Locator" d:IsDataSource="True" /> </Application.Resources> </Application>
Файл MainWindow.язык XAML
<Window x:Class="GestionArticle.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:ignore="http://www.ignore.com" mc:Ignorable="d ignore" Height="410" Width="613" Title="MVVM Light Application" DataContext="{Binding MainVM, Source={StaticResource Locator}}"> <!-- <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Skins/MainSkin.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Window.Resources>--> <Grid x:Name="LayoutRoot"> <TextBlock FontSize="36" FontWeight="Bold" Foreground="#FFF3ACF3" Text="{Binding WelcomeTitle}" VerticalAlignment="Center" HorizontalAlignment="Center" TextWrapping="Wrap" Margin="317.5,138,76.5,194" Width="211" Background="#FF7FE6FD" /> <ListView HorizontalAlignment="Left" Height="225" Margin="59,31,0,0" VerticalAlignment="Top" Width="185" ItemsSource="{Binding Articles, Mode=OneWay}"> <ListView.View> <GridView> <GridViewColumn/> </GridView> </ListView.View> </ListView> <Button Content="Ajouter" HorizontalAlignment="Left" Height="40" Margin="308,292,0,0" VerticalAlignment="Top" Width="162" Command="{Binding ChargerArticleCommand, Mode=OneWay}"/> </Grid> </Window>
когда я запускаю я не могу найти статью объект вставить по умолчанию:
изображение