从WPF中的列表框中读取项目

时间:2013-08-08 06:13:41

标签: c# wpf listboxitem

我在WPF C#中有列表框,其中包含一些条目。在这些条目中,我将仅更新单个条目。 我想要的是,当我点击“完成编辑”按钮时,我想只读取更新的(其文本已更改)条目而不是所有其他条目。

我的条目名称是“Harvest_TimeSheetEntry”。我尝试了下面的行,但它读取了所有条目。

Harvest_TimeSheetEntry h = listBox1.SelectedItem as Harvest_TimeSheetEntry;

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我更喜欢通过使用DataBox的ListBox或CurrentItem的SelectedItem属性来解决问题,并将其绑定到我的ViewModel中的属性。

<ListBox ItemsSource="{Binding HarvestTimeSheet}" SelectedItem={Binding CurrentEntry}.../>

<Button Content="Done Editing..." Command="{Binding DoneEditingCommand}"/>

在我的ViewModel中我有

    private Harvest_TimeSheetEntry _currentHarvest_TimeSheetEntry;
    public Harvest_TimeSheetEntry CurrentHarvest_TimeSheetEntry
    {
        get { return _currentHarvest_TimeSheetEntry; }
        set
        {
            if (_currentHarvest_TimeSheetEntry == value) return;
            _currentHarvest_TimeSheetEntry = value;
            RaisePropertyChanged("CurrentHarvest_TimeSheetEntry");
        }
    }

这是设置为ListBox中的选定项目。

我的ViewModel提供按钮的代码。我正在使用MVVM灯来轻松提供RelayCommand和RaisePropertyChanged。

    private RelayCommand _doneEditingCommand;
    public RelayCommand DoneEditingCommand
    {
        get { return _doneEditingCommand ?? (_doneEditingCommand = new RelayCommand(HandleDoneEditing, () => true)); }
        set { _doneEditingCommand = value; }
    }

    public void HandleDoneEditing()
    {
        if (CurrentHarvest_TimeSheetEntry != null)
            //Do whatever you need to do.
    }

这是一项更多的工作,但你在流程中获得了如此多的控制和灵活性。