2017-06-07 33 views
1

我有一個ListView。此ListView的Itemsource由ObservableCollection填充。ListViewItem作爲EditableTextBlock

我試圖實現的是使ListViewItems可編輯。因此,我下載了這個解決方案https://www.codeproject.com/Articles/31592/Editable-TextBlock-in-WPF-for-In-place-Editing

只要我的ListView沒有填充ObservableCollection我可以使這項工作。

我不ObservableCollection代碼:

private void ListView1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.F2) 
     SetCurrentItemInEditMode(true); 
} 

private void SetCurrentItemInEditMode(bool EditMode) 
{ 
    ListViewItem m = (ListViewItem)ListView1.SelectedItem; 
    EditableTextBlock e = m.Content as EditableTextBlock; 
    e.IsInEditMode = EditMode; 
} 

然而,當我填充ListView項目與ObservableCollection這是行不通的。

MyFiles m = (MyFiles)ListView1.SelectedItem; 
EditableTextBlock e = m.FileName as EditableTextBlock; 
e.IsInEditMode = EditMode; 

MyFiles包含(FileName,FileCreation和FileIcon)。我想將選定的文件名ListViewItem轉換爲EditableTextBlock控件。

謝謝你的幫助。

P.S.我對WPF很新,所以如果我的問題很蠢,請道歉。

+2

這就是公關etty窮人的解決方案,它看起來像來自winforms的傢伙,還沒有聽說過數據模板。在WPF中編輯某些東西非常容易,只需提供適當的模板並使用雙向綁定即可。無法找到簡單的副本,請參閱[本教程](http://www.wpf-tutorial.com/listview-control/listview-with-gridview/)。 – Sinatr

回答

0

您應該在您的XAML標記中定義一個ItemTemplate,其中EditableTextBlock。注意綁定:

<ListView x:Name="ListView1"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <local:EditableTextBlock Text="{Binding FileName}" IsInEditMode="{Binding IsInEditMode}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

那麼你應該一個IsInEditMode屬性添加到您的MyFiles類,每當你想放的項目進入編輯模式設置這一項爲true:

private void SetCurrentItemInEditMode(bool EditMode) 
{ 
    MyFiles obj = ListView1.SelectedItem as MyFiles; 
    obj.IsInEditMode = EditMode; 
} 

這個工作,你MyFiles類應實現INotifyPropertyChanged接口,並在IsInEditMode setter方法提高PropertyChanged事件作爲MSDN上解釋說:https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx

+0

謝謝!工作像魅力。作爲獎勵,我終於明白了inotifypropertychanged。 :-) –