我有一个带有子控件的重复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绑定到每个控件?或者我是否需要实现将其连接到后端的方法。
答案 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,但最终它们都做了很多相同的事情,只是分离了那些编程问题。