EM_Y Ответов: 2

Как я могу установить мое представление модели в контексте данных, в то время как я использую управления configurataion.теперь читатель в моей модели представления конструктора ?


Я устанавливаю свой modelView в контексте данных, как показано ниже :
но я получаю эту одну ошибку имя параметра путь не может быть нулевым в этой строке :
<local:ViewModel/>

Я ограничиваю проблему в программе чтения текстовых файлов, используемой в моем представлении публичной модели ,
Причина в том, что когда я изменил конфигурацию management.appsetting с помощью простого строкового пути, ошибка исчезла .

На мой вопрос , как я могу установить мое представление модели в контексте данных при использовании конфигурации приложения/настройки управления configurataion на мой взгляд модель конструктора ?

Спасибо Вам за помощь и внимание.

Что я уже пробовал:

<Window x:Class="BancProduction.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:BancProduction"
        Title="MainWindow" Height="432.4" Width="687.4">
      
    <Window.DataContext>
        <local:ViewModel/>
    </Window.DataContext>


Это мой первый partcode моей Viewmodel:

namespace BancProduction
{
    class ViewModel : INotifyPropertyChanged
    {

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;
    

        #endregion
  
        public void RaisePropertyChanged([CallerMemberName] string str = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(str));
            }
        }

 public search SearchCritaire
        {
            get
            {
                return Search;
            }
            set
            {
                if (value != Search)
                {
                    Search = value;
                    RaisePropertyChanged();
                }
            }
        }
     
        private ObservableCollection<search> famille;
   
        public ObservableCollection<search> Famille { get { return famille; }
            set { if (value != famille)
                {
                 famille = value; RaisePropertyChanged(); }
            
            } }

             public ViewModel()
        {   
          //this is the line reader that makes the error   
         string[] lineOfContents = File.ReadAllLines(ConfigurationManager.AppSettings["FiletextPath"]);

            MyList= new ObservableCollection<search>();           
           foreach (var line in lineOfContents)
           {
       string myline = line ;
                SearchCritaire = new search() { banc = line};
               

                MyList.Add(SearchCritaire);

            }

          }



Я использую метод привязки с моделью представления , поэтому я не работаю с кодом позади метода :

namespace BancProduction
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
}

}

jimmson

Как выглядит класс ViewModel?

EM_Y

привет Джим ,
Я обновил свой modelView up ! пожалуйста, проверьте это

jimmson

Я не думаю, что эта ошибка возникает где-либо в коде, который вы опубликовали. В коде нет параметра "путь", и вы не выполняете ни один метод, который требует его выполнения. Тебе придется копнуть глубже. Есть ли у вас детали исключения? Ищите трассировку стека и внутренние исключения. Не стесняйтесь обновлять свой вопрос с помощью этой информации.

jimmson

Вероятно, из того, что вы здесь разместили, мало что можно понять. По крайней мере, для меня код выглядит нормально, и, скорее всего, проблема где-то в другом месте. Как я уже упоминал, публикация класса, который вы устанавливаете в качестве своего DataContext, или кода, стоящего за данным окном, даст гораздо больше понимания проблемы.

EM_Y

Привет, Джим , я нашел , где была проблема : у меня есть эта модель публичного представления, когда я замаскировал содержимое кода, ошибка исчезла, я хочу, чтобы вы нашли причину, связанную между моей моделью публичного представления и контекстом данных .

   public ViewModel()
        {   
            
         string[] lineOfContents = File.ReadAllLines(ConfigurationManager.AppSettings["FiletextPath"]);

            MyList= new ObservableCollection<search>();           
           foreach (var line in lineOfContents)
           {
       string myline = line ;
                SearchCritaire = new search() { banc = line};
               

                MyList.Add(SearchCritaire);

            }

          }

jimmson

Рада, что вы получили ее решить. На самом деле я искал конструктор модели, но вы не включили его в свой код.

EM_Y

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

jimmson

Я опубликую решение. Теперь это должно быть легко ;)

2 Ответов

Рейтинг:
10

EM_Y

public ViewModel()
{
    MyList = new ObservableCollection<search>();
    
    string path = ConfigurationManager.AppSettings["FiletextPath"];
    if (!string.IsNullOrEmpty(path) && File.Exists(path))
    {
        foreach (string line in File.ReadLines(path))
        {
            MyList.Add(new search { banc = line });
        }
    }
}


Рейтинг:
1

jimmson

Я почти уверен, что исключение выбрасывается из строки:

string[] lineOfContents = File.ReadAllLines(ConfigurationManager.AppSettings["FiletextPath"]);

Проверьте свой app.config файл и то FiletextPath настройка приложения. Либо он отсутствует, либо вы неправильно написали его, либо значение пустое.


EM_Y

Да ,это связано с app.config , потому что когда я заменяю configAPPsetting простым строковым путем, ошибка исчезает .

foreach (string line in File.ReadAllLines("D:\\All Documents\\Famille.txt"))
            {
             } 


Спасибо, Джим, я постараюсь найти и опубликовать решение .