2016-08-30 28 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}"/> 
相关问题