Есть разметка XAML: Так вот, в этом случае связывание не срабатывает - отображаемый элемент - пустой. А вот если это сделать в c# коде и убрать с XAML - вуаля, все работает: PathListView.ItemsSource = ViewModel.MainViewModel.SettingModel.CollectionPaths;
В чем разница между тем, как привязывать, в xaml или c# коде? Почему в одном случае работает, а в другом - нет?
Обе коллекции ObservableCollection<> UPD Код модели: using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization; namespace DocumentAdder.Model
{
[DataContract]
public class SettingsModel : BaseModel
{
#region Fields
private string _pathToDirectory;
private string _fileTypes;
private ObservableCollection _collectionPaths;
#endregion #region Properties ///
/// Представляет собой путь к папке с файлами, которые следует обработать
///
/// PathToDirectory свойство задает/возвращает значение типа string поля, _pathToDirectory
[DataMember]
public string PathToDirectory
{
get
{
return _pathToDirectory;
}
set
{
_pathToDirectory = value;
NotifyPropertyChanged();
}
} ///
/// Предоставляет данные о типах текстовых файлов, которые необходимо сканировать и обрабатывать
/// FileTypes свойство возвращает значения типа string поля, _fileTypes
///
[DataMember]
public string FileTypes
{
get
{
return _fileTypes;
}
private set
{
_fileTypes = value;
NotifyPropertyChanged();
}
} ///
/// Возвращает коллекцию всех путей, с которых нужно обработать файлы
///
/// CollectionPaths свойство возвращает значение типа ObservableCollection поля, _collectionPaths
[DataMember]
public ObservableCollection CollectionPaths
{
get
{
return _collectionPaths;
}
private set
{
_collectionPaths = value;
NotifyPropertyChanged();
}
}
#endregion ///
/// Создает модель настроек,
/// инициализирует коллекцию путей к директориям, где лежат файлы,
/// задает возможные форматы файлов для чтения.
///
public SettingsModel()
{
_fileTypes = "*.txt, *.doc, *.docx, *.rtf, *.otd, *.pdf";
CollectionPaths = new ObservableCollection();
}
}
}
Код ViewModel: using DocumentAdder.Helpers;
using DocumentAdder.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using Microsoft.WindowsAPICodePack.Dialogs; namespace DocumentAdder.ViewModel
{
public class MainViewModel
{
public MainModel DocumentAdderModel { get; private set; }
public static SettingsModel SettingModel { get; set; } #region Commands
//main programm commands
public ICommand StartProgrammCommand { get; private set; }
public ICommand StopProgrammCommand { get; private set; }
public ICommand RestartProgrammCommand { get; private set; } //settings commands
public ICommand AddLocalStorageCommand { get; private set; }
#endregion #region Methods
//main programm methods //settings methods
private void addLocalStorage()
{
List selectedPaths = null;
var cofd = new CommonOpenFileDialog();
cofd.IsFolderPicker = true;
//cofd.Title = "";
cofd.Multiselect = true;
if (cofd.ShowDialog() == CommonFileDialogResult.Ok)
{
selectedPaths = cofd.FileNames.ToList();
}
if (selectedPaths != null)
{
foreach (var item in selectedPaths)
{
SettingModel.CollectionPaths.Add(item);
}
}
} private void addFTPStorage()
{ }
#endregion static MainViewModel()
{
if (SettingModel == null)
{
var single = new SettingsModel();
SettingModel = single;
}
} public MainViewModel()
{
DocumentAdderModel = new MainModel();
AddLocalStorageCommand = new DelegateCommand(arg => addLocalStorage());
}
}
}
Код XAML окна:
Комментариев нет:
Отправить комментарий