2010-07-28 6 views
0

저는 "봉투"를 예산 방법으로 사용하는 개인적인 개인 재정 프로그램을 만들고 있습니다. 저는 주로 이것을 WPFS & MVVM을 배우는 수단으로 사용하고 있습니다. 나는 내가 내 사용자 지정 ObservableCollection에에서 만든 사용자 지정 속성에 데이터 바인딩 수없는 문제로 실행했습니다, 여기에 본 : 나는 문제없이 컬렉션에 내 데이터 그리드를 데이터 바인딩 수 있어요Custom 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 아래에 나는 컬렉션에 봉투의 총 잔액을 표시하는 데 필요한 레이블이 있습니다. 부모 ObservableCollection 클래스의 속성 인 컬렉션의 Count 속성에 databind 할 수 있지만 사용자 지정 클래스에서 Total 또는 SavingsTotal에 데이터 바인딩 할 수 없습니다.

레이블은 프로그램이 실행될 때 그냥 비어 있고 VS2010 디자이너를 사용하고 레이블의 내용에 대한 작은 데이터 바인딩 마법사로 이동하면 도구 상자에 'Total'밑줄이 표시되고 "Path item 'Total' 해결할 수 없습니다. " EnvColl.Count 경로를 변경하면 다시 작동합니다.

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

한 번 더 참고, 내 뷰 모델에 나는 그냥 작동하지 않는 XAML/데이터 바인딩에있어, 문제없이 내 컬렉션에 총과 SavingsTotal 속성에 액세스 할 수 있습니다.

+0

Binding에서 BindsDirectlyToSource = true를 시도해 보셨습니까? –

답변

0

바하마! 이런 일이 생길 때가 싫어 ... 켄트 당 BindsDirectlyToSource = true를 추가하여 잘못된 위치에 추가하여 빌드 오류가 발생했습니다. 그런 다음 데이터를 제거하고 다시 작성하면 갑자기 데이터 바인딩이 작동하기 시작합니다. . . : \ 나는 행운을 빌어 여러 번 솔루션을 다시 빌드했지만 컴파일 오류가 발생하여 작업이 시작되었습니다. 2010 년 컴파일러에 버그가 있다면 ...?

0

VS2010

내가 디버그 모드 여러 번에 응용 프로그램을 실행할 때 그것이 나에게 일어난 suddently 나는 그것을 죽여야 (새로운 commers가이 문제에 대해 알 필요가 있습니다. 항상)/디버거를 멈추고 코드를 다시 컴파일해야하는지 알 수 없습니다.

많은 도움이되는 앱/솔루션을 닫았다가 다시 열면 알 수 있습니다. 디버깅 모드에서 실행하는 경우 확실히 이렇게해야합니다.

0

나는이 전에 몇 년을 게시했습니다 알지만, 내가 LabelDataGrid가 포함 된 Grid 있었다 비슷한 문제가 있었다. 내 DataGridItemsSourceObservableCollection으로 설정할 수 있었지만 내 Label에서 원하는 속성에 액세스 할 수 없었습니다. 그래서 내가 한 것은 Grid을 내 포함하는 DataContextObservableCollection으로 설정 한 다음 내 바인딩의 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> 

원래 포스터가 찾고 있던 것을 달성했다고 생각합니다. 그리고 희망이 없다면 다른 사람들에게 도움이 될 수 있습니다.

관련 문제