2013-01-14 2 views
1

나는이 문제에 대한 답을 알기 위해 'duh'라고 말할 것임을 확신하지만, 현재 마음에 들지는 않지만, 일부 논리에 속성을 바인딩하는 중

다음과 같은 클래스를 가정 ... 나를 돕기 위해 여기에 비동기 도움 스레드를 회전 M :
public class DerivedTicket: Ticket 
{ 
    public ObservableCollection<TicketDetail> TicketDetails { get; set; } 
} 

public class Ticket 
{ 
    public static readonly DependencyProperty SubTotalProperty = DependencyProperty.Register("SubTotal", typeof(decimal), typeof(TicketsRow)); 
    public static readonly DependencyProperty TaxProperty = DependencyProperty.Register("Tax", typeof(decimal), typeof(TicketsRow)); 
    public static readonly DependencyProperty TotalProperty = DependencyProperty.Register("Total", typeof(decimal), typeof(TicketsRow)); 

    public decimal SubTotal 
    { 
     get { return (decimal)this.GetValue(SubTotalProperty); } 
     set { this.SetValue(SubTotalProperty, value); } 
    } 

    public decimal Tax 
    { 
     get { return (decimal)this.GetValue(TaxProperty); } 
     set { this.SetValue(TaxProperty, value); } 
    } 

    public decimal Total 
    { 
     get { return (decimal)this.GetValue(TotalProperty); } 
     set { this.SetValue(TotalProperty, value); } 
    } 
} 


public class TicketDetail 
{ 
    public static readonly DependencyProperty ItemIdProperty = DependencyProperty.Register("ItemId", typeof(int?), typeof(TicketDetailsRow)); 
    public static readonly DependencyProperty PriceProperty = DependencyProperty.Register("Price", typeof(decimal), typeof(TicketDetailsRow)); 
    public static readonly DependencyProperty TaxProperty = DependencyProperty.Register("Tax", typeof(decimal?), typeof(TicketDetailsRow)); 
    public static readonly DependencyProperty DescriptionProperty = DependencyProperty.Register("Description", typeof(string), typeof(TicketDetailsRow)); 

    public int? ItemId 
    { 
     get { return (int?)this.GetValue(ItemIdProperty); } 
     set { this.SetValue(ItemIdProperty, value); } 
    } 

    [Field] 
    public decimal Price 
    { 
     get { return (decimal)this.GetValue(PriceProperty); } 
     set { this.SetValue(PriceProperty, value); } 
    } 

    [Field] 
    public decimal? Tax 
    { 
     get { return (decimal?)this.GetValue(TaxProperty); } 
     set { this.SetValue(TaxProperty, value); } 
    } 

    [Field] 
    public string Description 
    { 
     get { return (string)this.GetValue(DescriptionProperty); } 
     set { this.SetValue(DescriptionProperty, value); } 
    } 
} 

어떻게 당신이 TicketDetails의 합과 동기화에 SubTotal을 유지 가겠어요

? 바인딩을 사용하거나 INotifyPropertyChanged 또는 다른 방법으로 도움을 받으시겠습니까?

+0

TicketDetails가 Ticket의 속성으로 존재하지 않는 이유는 무엇입니까? 그렇게하면 Ticket과 상호 작용하고이를 사용하여 다양한 값의 변경 사항을 관리 할 수 ​​있습니다. 티켓 컬렉션을 유지하는 것이 더 합리적인 것처럼 보입니다. 문제의 더 많은 부분을 보지 않고도 모델링 할 수있는 Ticket과 TicketDetails 사이의 "속한"관계가있는 것 같습니다. – dash

+0

@dash Henk의 대답에 대한 의견보기. 또한, 그렇게 쉽게 해결할 수 있다고 생각되면 제안 된 디자인을 토대로 제 질문에 대답 해주십시오. –

답변

3

NotifyCollectionChanged 이벤트를 사용하여 티켓 세부 정보 변경에 대한 알림을 받고 종속성 속성 SubTotal을 다시 계산할 수 있습니다.

+0

항목 추가/제거가 완료되면 알려주 겠지만 항목 가격이 변경되면 INotifyPropertyChanged의 도움을 받아야합니다. –

+0

맞습니다. 또한 새로 추가 된 모든 티켓 세부 정보의 속성 변경 이벤트에 연결해야합니다. – MatthiasG

+1

Sheesh, 앉아서 30 분 동안 Henk이 의견을 보내려고하면 내 설계가 바뀌면 문제가 쉽게 해결 될 것입니다 (그의 답변에서 분명히 제시하므로). 나의 디자인에 관계없이 대답. 120K 담당자가있는 사람이 대답이라고 말하면 나는 또한 그렇게 할 것입니다. –

관련 문제