Страницы

Поиск по вопросам

суббота, 15 июня 2019 г.

Странность с binding wpf

Есть разметка 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 окна:

Комментариев нет:

Отправить комментарий