Проблема с биндингом ObservableCollection к ItemsControl

219
23 ноября 2017, 00:30

Доброе время суток. Прошу помочь найти, или указать в чём ошибка в следующей ситуации...

Есть класс Session:

public class Session : INotifyPropertyChanged
{
    private string _dirPath;
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    public string DirPath
    {
        get => _dirPath;
        set
        {
            if (_dirPath == value) return;
            _dirPath = value;
            OnPropertyChanged();
        }
    }
}

Есть коллекция, объявленная во ViewModel'e (MainViewModel):

private ObservableCollection<Session> _sessionsList;
    public ObservableCollection<Session> SessionsList
    {
        get => _sessionsList ?? (_sessionsList = new ObservableCollection<Session>());
        set => _sessionsList = value;
    }

Коллекция SessionsList привязана ItemsControl'у следующим образом (MainViewModel не DataContext данной View):

<ScrollViewer Grid.Row="3" Height="340"
              HorizontalAlignment="Stretch"
              Margin="0,12,0,0">
    <ItemsControl ItemsSource="{Binding SessionsList}"
                  DataContext="{x:Static classes:Core.MainViewModel}">
         <ItemsControl.ItemTemplate>
               <DataTemplate>
                    <extentions:LastSessionItem DirPath="{Binding Path=DirPath}" />
               </DataTemplate>
         </ItemsControl.ItemTemplate>
    </ItemsControl>
</ScrollViewer>

Где LastSessionItem - это CustomControl, реализующий в то числе:

    public string DirPath
    {
        get => (string)GetValue(PropertyDirPath);
        set => SetValue(PropertyDirPath, value);
    }
    public static readonly DependencyProperty PropertyDirPath = DependencyProperty.Register("DirPath",
        typeof(string), typeof(LastSessionItem), new PropertyMetadata(null, PropertyChangedCallback));
    private static void PropertyChangedCallback(DependencyObject d,
        DependencyPropertyChangedEventArgs args)
    {
        // не срабатывает...нет изменений
    }

SessionsList заполняется при создании класса MainViewModel. Вроде, всё верно. Однако...DirPath не биндится, остаётся равным null. Ошибок студия тоже никаких не показывает

Answer 1

Как же важно иногда в слух сформулировать вопрос (или просто написать)... Проблему решил. В классе LastSessionItem было ошибочно сделано следующие:

public LastSessionItem()
{
    //...    
}
READ ALSO
Какие есть способы вести лог всех ошибок приложения в ASP.NET Core?

Какие есть способы вести лог всех ошибок приложения в ASP.NET Core?

Какие есть способы вести лог всех ошибок приложения в ASPNET Core? Например хотелось бы сохранять все исключения со стеком вызова в текстовые...

285
Контекстное меню на элементе списка

Контекстное меню на элементе списка

Есть форма поискаХочу добавить контекстное меню на элементе, который является результатом поиска(например на фамилии работника при нажатии...

256
Получить имена доступных сетевых папок

Получить имена доступных сетевых папок

Есть сервер с несколькими расшаренными папками, например

210
Отправка и чтение данных по COM-порту

Отправка и чтение данных по COM-порту

Здравствуйте, уважаемые программисты!

275