2016-08-30 32 views
0

我無法弄清楚爲什麼ListView在更新項目到可觀察集合時沒有更新。 這裏可是什麼UI開始爲 enter image description here將項添加到ObservableCollection不會更改ListView

而這裏的是什麼樣子後,我添加項目 enter image description here

無論出於何種原因ListView控件不拿起工作秩序,也沒有日期的檢查,它更新TechCount ...

這裏的ListView控件代碼:

<ListView Grid.Row="2" 
     ItemsSource="{Binding LaborItems}"  
     SelectedItem="{Binding SelectedLaborItem}" 
     Margin="10,10,10,9"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="#" Width="55" DisplayMemberBinding="{Binding Labor.WorkOrderNo}"/> 
      <GridViewColumn Header="Date" Width="100" DisplayMemberBinding="{Binding Labor.Time.CheckIn}"/> 
      <GridViewColumn Header="Techs" DisplayMemberBinding="{Binding TechCount}" /> 
     </GridView> 
    </ListView.View> 
</ListView> 

它更容易看到relevan t代碼在圖片中,所以我正在做一個短的屏幕而不是原始代碼 enter image description here

第26行是當我點擊UI上的+按鈕時運行的。 TechCount對CheckIn有一個類似的實現,它只是指勞工內的字段。

下面是完整的視圖模型代碼:

public class ServiceItemsViewModel : ViewModelBase 
{ 
    public Labor Labor { get; set; } 
    public ObservableCollection<Labor> LaborItems { get; private set; } = new ObservableCollection<Labor>(); 

public ServiceItemsViewModel() 
{ 
    Labor = new Labor(); 
    Labor.Rates = new LaborRatesDual(); 
    AddLaborCommand = new DelegateCommand(addLabor, null); 
} 

public ICommand AddLaborCommand { get; private set; } 

private void addLabor(object obj) 
{ 
    LaborItems.Add(Labor); 
    Labor = new Labor(); 
} 

private bool canAddLabor(object arg) 
{ 
    if (Labor.Duration.Minutes < 1) 
    { 
     return false; 
    } 

    //if (AdditionalBillingRate <= 0 || AdditionalPayoutRate <= 0) 
    //{ 
    // return false; 
    //} 

    return true; 
} 

public DateTime CheckIn 
{ 
    get { return Labor.Time.CheckIn; } 
    set 
    { 
     Labor.Time.CheckIn = value; 
     RaisePropertyChanged(nameof(Labor)); 
    } 
} 
public DateTime CheckOut 
{ 
    get { return Labor.Time.CheckOut; } 
    set 
    { 
     Labor.Time.CheckOut = value; 
     RaisePropertyChanged(nameof(Labor)); 
     ((DelegateCommand)AddLaborCommand).RaiseCanExecuteChanged(); 
    } 
} 
public int TechCount 
{ 
    get { return Labor.TechCount; } 
    set 
    { 
     Labor.TechCount = value; 
     RaisePropertyChanged(nameof(Labor)); 
    } 
} 
public decimal InitialPayoutRate 
{ 
    get { return Labor.Rates.InitialPayoutRate; } 
    set 
    { 
     Labor.Rates.InitialPayoutRate = value; 
     RaisePropertyChanged(nameof(Labor)); 
     //((DelegateCommand)AddLaborCommand).RaiseCanExecuteChanged(); 
    } 
} 
public decimal AdditionalPayoutRate 
{ 
    get { return Labor.Rates.AdditionalPayoutRate; } 
    set 
    { 
     Labor.Rates.AdditionalPayoutRate = value; 
     RaisePropertyChanged(nameof(Labor)); 
     //((DelegateCommand)AddLaborCommand).RaiseCanExecuteChanged(); 
    } 
} 
public decimal InitialBillingRate 
{ 
    get { return Labor.Rates.InitialBillingRate; } 
    set 
    { 
     Labor.Rates.InitialBillingRate = value; 
     RaisePropertyChanged(nameof(Labor)); 
     //((DelegateCommand)AddLaborCommand).RaiseCanExecuteChanged(); 
    } 
} 
public decimal AdditionalBillingRate 
{ 
    get { return Labor.Rates.AdditionalBillingRate; } 
    set 
    { 
     Labor.Rates.AdditionalBillingRate = value; 
     RaisePropertyChanged(nameof(Labor)); 
     //((DelegateCommand)AddLaborCommand).RaiseCanExecuteChanged(); 
    } 
} 

private Labor selectedLaborItem; 
public Labor SelectedLaborItem 
{ 
    get { return selectedLaborItem; } 
    set 
    { 
     selectedLaborItem = value; 
     RaisePropertyChanged(nameof(Labor)); 
    } 
} 

勞動的內容後,我點擊+按鈕: enter image description here

+0

你能否把一個斷點線26,並告訴我們'勞動的內容「是嗎? – Max

+0

@Max在主帖中添加了截圖。 – haosmark

+0

不確定,因爲我沒有使用WPF一段時間,但是您能否將DisplayMemberBinding =「{Binding Labor.Time.CheckIn}」'更改爲'DisplayMemberBinding =「{Binding Labor.Time.CheckIn,Mode = TwoWay ,UpdateSourceTrigger = PropertyChanged}「'?也許這些新屬性中的一個'Mode'或'UpdateSourceTrigger'可以幫助你解決這個問題。 – Max

回答

0

你列綁定是錯誤的:

<GridViewColumn Header="#" Width="55" DisplayMemberBinding="{Binding **Labor.**WorkOrderNo}"/> 
<GridViewColumn Header="Date" Width="100" DisplayMemberBinding="{Binding **Labor.**Time.CheckIn}"/> 
<GridViewColumn Header="Techs" DisplayMemberBinding="{Binding TechCount}" /> 

見上面標有星號的地方。

0

您已經綁定到勞動的集合

ItemsSource="{Binding LaborItems}" 

勞動不是勞動

的屬性
<GridViewColumn Header="#" Width="55" DisplayMemberBinding="{Binding WorkOrderNo}"/> 
<GridViewColumn Header="Date" Width="100" DisplayMemberBinding="{Binding Time.CheckIn}"/> 
相關問題