Проблема привязки данных с пользовательскими свойствами ObservableCollection - PullRequest
0 голосов
/ 28 июля 2010

Я делаю небольшую программу личных финансов, которая использует «конверты» в качестве метода бюджетирования.В основном я делаю это как средство для изучения WPF и MVVM.Я столкнулся с проблемой, когда я не могу привязать данные к пользовательским свойствам, которые я создал в своей пользовательской коллекции ObservableCollection, как показано здесь:

public class ObservableEnvelopeCollection : ObservableCollection<Envelope>
{
    public decimal Total
    {
        get
        {
            decimal total = 0;
            foreach (Envelope env in this)
            {
                total += env.Balance;
            }
            return total;
        }
    }

    public decimal SavingsTotal
    {
        get
        {
            blah blah. . .
        }
    }
}

Я могу без проблем привязать свою сетку данных к коллекции.Тем не менее, под сеткой данных у меня есть метки, которые мне нужны, чтобы отобразить итоговое сальдо для конвертов в коллекции.Я могу привязать данные к свойству Count коллекции, которое является свойством родительского класса ObservableCollection, но я не могу привязать данные к Total или SavingsTotal из моего пользовательского класса.

Метка просто пустакогда программа запущена, и если я использую конструктор VS2010 и перехожу к маленькому мастеру привязки данных для метки «Контент», он подчеркивает «Итого» и показывает подсказку: «Элемент пути« Итого »не может быть разрешен».Опять же, если я изменю путь на EnvColl.Count, он будет работать.

<Label Content="{Binding Path=EnvColl.Total}"/>

Еще одно примечание: в моей модели представления я могу без проблем получать доступ к свойствам Total и SavingsTotal в моей коллекции, это только в привязке XAML / данныхчто это не работает.

Ответы [ 3 ]

0 голосов
/ 10 августа 2010

против 2010

(как всегда некоторым новичкам, возможно, придется знать об этой проблеме.)

это случилось со мной, когда я много раз запускал приложение в режиме отладки, и неожиданно мне пришлось убить его / остановить отладчик, затем я заметил, что он не знает, когда ему нужно перекомпилировать код.

Я заметил, что если я закрою и снова открою приложение / решение, это очень поможет. если вы работаете в режиме отладки, вам придется делать это очень часто.

0 голосов
/ 26 июня 2012

Я знаю, что это было опубликовано пару лет назад, но у меня была похожая проблема, где у меня был Grid, который содержал Label и DataGrid. Мне удалось установить ItemsSource моего DataGrid на ObservableCollection, но я не смог получить доступ к нужным свойствам в моем Label. Поэтому я установил DataContext моего содержащего Grid на ObservableCollection, затем я использовал свойство RelativeSource моего связывания, чтобы найти Предка (Grid). Синтаксис выглядел примерно так:

<Grid DataContext = "{Binding MyObservableCollection}">
    <Label Content = "{Binding MyDesiredProperty}"/>
    <DataGrid ItemsSource = "{Binding Path=DataContext, RelativeSource={RelativeSource Mode=FindAncestor, AncestoryType={x:Type Grid}}}">
    </DataGrid>
</Grid>

Я думаю, что это достигло того, что искал оригинальный постер. И, надеюсь, если нет, это может помочь некоторым другим.

0 голосов
/ 28 июля 2010

Ба! Я ненавижу, когда такие вещи случаются ... Я пошел, чтобы добавить BindsDirectlyToSource = true для Кента и добавил его в неправильное место, вызывая ошибку сборки. Я тогда удалил это и восстановил, и привязка данных внезапно начала работать. , , : \ Я несколько раз перестраивал решение, но безуспешно, но из-за ошибки компиляции и ее удаления все стало работать. Интересно, есть ли что-то глючное в компиляторе 2010 года ...?

...