WPF可编辑的文本块itemscontrol MVVM

时间:2015-04-30 13:40:30

标签: wpf xaml mvvm textblock

我有一个带有子控件的重复stackpanel的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绑定到每个控件?或者我是否需要实现将其连接到后端的方法。

1 个答案:

答案 0 :(得分:0)

  

这将导致显示所有文本块

使用控件的名称绑定到它是我经常使用的策略,但这次它让你失望,因为你在重复模板中。要在模板中使用该绑定过程,选择将变为全局而非本地。

所以一个策略是使用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绑定时不一定会发挥作用。

数据是驻留在VM上还是页面无关紧要,无需设置页面的datacontext或控件的datacontext,并使用有效的类实例反映由绑定系统。更不用说了。

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