Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ListViewItem作为EditableTextBlock_C#_Wpf - Fatal编程技术网

C# ListViewItem作为EditableTextBlock

C# ListViewItem作为EditableTextBlock,c#,wpf,C#,Wpf,我有一个列表视图。此列表视图的Itemsource由ObservableCollection填充 我试图实现的是使ListViewItems可编辑。因此我下载了这个解 只要我的列表视图中没有填充可观察集合,我就可以实现这一点 我的代码没有可观察到的收集: private void ListView1_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.F2) SetCurrentItemInEditMode(

我有一个
列表视图
。此
列表视图的Itemsource由
ObservableCollection
填充

我试图实现的是使ListViewItems可编辑。因此我下载了这个解

只要我的
列表视图
中没有填充
可观察集合
,我就可以实现这一点

我的代码没有可观察到的收集

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;
}
但是,当我用
observedcollection
填充
ListView
项时,它不起作用

MyFiles m = (MyFiles)ListView1.SelectedItem;
EditableTextBlock e = m.FileName as EditableTextBlock;
e.IsInEditMode = EditMode;
MyFiles包含(文件名、文件创建和文件图标)。我想将所选的文件名
ListViewItem
转换为
EditableTextBlock
控件

谢谢你的帮助


另外,我是WPF的新手,如果我的问题很愚蠢,请道歉。

您应该在XAML标记中定义一个带有
EditableTextBlock
ItemTemplate
。请注意绑定:

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

为了让它发挥作用,您的
MyFiles
类应该实现
INotifyPropertyChanged
接口,并在
IsInEditMode
属性的setter中引发
PropertyChanged
事件,如MSDN:

上所述。您应该在XAML标记中使用
EditableTextBlock
定义一个
ItemTemplate
。请注意绑定:

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

为此,您的
MyFiles
类应该实现
INotifyPropertyChanged
接口,并在
IsInEditMode
属性的setter中引发
PropertyChanged
事件,如MSDN上所述:

这是您链接的非常糟糕的解决方案,看起来这个家伙来自winforms,还没有听说过数据模板。在WPF中使某些内容可编辑非常容易,您只需提供适当的模板并使用双向绑定。找不到简单的副本,请参见,例如,您链接的解决方案非常糟糕,看起来这家伙来自winforms,还没有听说过数据模板。在WPF中使某些内容可编辑非常容易,您只需提供适当的模板并使用双向绑定。找不到简单的副本,请参见例如…谢谢!工作很有魅力。作为奖励,我终于明白了InotifyProperty的变化非常感谢。工作很有魅力。作为奖励,我终于明白了InotifyProperty的变化