繁体   English   中英

将项目添加到ObservableCollection不会更改ListView

[英]Adding items to ObservableCollection doesn't change the ListView

当我向可观察的集合中添加项目时,我无法弄清楚为什么我的ListView没有更新。 这是UI的开头 在此处输入图片说明

这是我添加项目后的样子 在此处输入图片说明

无论出于何种原因,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>

在图片中查看相关代码更容易,所以我正在做一个简短的屏幕,而不是原始代码 在此处输入图片说明

当我单击UI上的+按钮时,将运行第26行。 TechCount具有与CheckIn类似的实现,后者仅引用Labor中的字段。

这是完整的viewmodel代码:

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));
    }
}

单击+按钮后的人工内容: 在此处输入图片说明

您的列绑定是错误的:

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

请参阅上面的星号区域。

您已经绑定了劳工组

ItemsSource="{Binding LaborItems}" 

劳动不是劳动的财产

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM