2010-07-28 2 views
0

Я делаю небольшую программу личных финансов, которая использует «конверты» в качестве метода бюджетирования. Я в основном делаю это как средство для изучения WPF & MVVM. Я столкнулся с проблемой, где я не могу DataBind к пользовательским свойствам, которые я создал в моем пользовательском ObservableCollection, видел здесь:Проблема привязки данных с пользовательскими свойствами 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. . . 
     } 
    } 
} 

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

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

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

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

+0

Вы пытались использовать BindsDirectlyToSource = true для привязки? –

ответ

0

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

0

VS2010

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

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

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

0

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

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

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

Смежные вопросы