【问题标题】:WPF editable textblock itemscontrol MVVMWPF 可编辑文本块项控制 MVVM
【发布时间】:2015-07-10 06:00:01
【问题描述】:

我有一个带有重复堆栈面板和子控件的 itemscontrol。每个堆栈面板都包含一个我希望可编辑的文本块。该项目实施了一个 MVVM 框架,这使得这变得困难。我认为最好的方法是在每个连接到 BooleanToVisibilityConverter 的堆栈面板中创建一个按钮。此转换器连接到文本块并反转为文本框。所以它显示了两者之一。问题是我无法实现这个解决方案。

如果我将可见性绑定到后端,那么这将导致显示所有文本块或非文本块。我现在的解决方案如下:

<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
    <CheckBox x:Name="DisplayBox" IsChecked="False"/>
        <TextBlock Visibility="{Binding ElementName=DisplayBox,
                                        Path=IsChecked, 
                                        Converter={StaticResource BoolToVis}}">
             <Run Text="{Binding Title}"/>
        </TextBlock>
</StackPanel>

所以我的问题是: 有没有一种简单的方法来实现一个只有 XAML 绑定到每个控件的可编辑文本块?或者我是否需要实现一种将其连接到后端的方式。

【问题讨论】:

  • 为什么不使用 TextBox,然后通过 IsReadOnly 属性打开/关闭编辑功能?这与 TextBlock 并不完全相同,但它非常简单。更改控件类型(即用于视图的 TextBlock 和用于编辑的 TextBox)并非易事:它是可行的,但不像使用相同的控件那么容易。
  • 哈哈,这正是我现在正在尝试的!我有这样的东西:` ` 现在我需要弄清楚如何更改与布尔值相关的文本框的样式并更改复选框到按钮
  • @RolandMakkelie 到底是什么问题?如何根据CheckBox放置2个可见的控件?
  • 我正在尝试制作一个文本块,或看起来像一个文本块的文本框,并通过单击使其成为可编辑的文本框。更改后的值会自动绑定到属性更改列表
  • @RolandMakkelie 你还需要解决方案还是对只读TextBox 很满意?

标签: wpf xaml mvvm textblock


【解决方案1】:

这将导致显示所有文本块

使用控件的名称来绑定它是我经常使用的一种策略,但这次它让你失望了,因为你在一个重复的模板中。因为在模板中使用该绑定过程 使得选择成为全局而不是局部的。

所以 one 策略是使用 RelativeSource 绑定并指向 local 父级(复选框),例如:

<CheckBox IsChecked="False">
    <TextBlock Visibility="{Binding IsChecked, 
                                    Converter={StaticResource BoolToVis},
                                    RelativeSource={RelativeSource Mode=FindAncestor, 
                                                     AncestorType={x:Type CheckBox}
                                                   }
                            }">
        <Run Text="{Binding Title}" />
    </TextBlock>
</CheckBox>

顺便说一句,不要读错了,

项目实施了一个 MVVM 框架,这使得这变得困难。

MVVM 只是一种分离代码关注点(操作、类和 GUI)的方法,坦率地说,在处理 Xaml 绑定时不一定会发挥作用。

数据是驻留在虚拟机上还是页面上无关紧要,所需的是将页面的数据上下文或控件的数据上下文设置为由绑定系统反映的有效类实例。不多不少。

对于新程序员来说,有很多概念,例如 MVVM 和绑定,而且学习曲线很重要。我的建议是,流行词曾经是三层系统……现在是 MVVM 或 MVC,但最终它们都做了很多相同的事情,只是分离了那些编程问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多