我在网格中有两个控件。
<TextBlock Text="{Binding Name}" TextAlignment="Center" />
<TextBox Visibility="{Binding ElementName=EditMode,Source={Binding RelativeSource=
{RelativeSource FindAncestor, AncestorType={x:Type Window}}},
Converter={StaticResource BoolToVis}}" Text="{Binding Name}"
TextAlignment="Center" />
我正在尝试实现类似可编辑/不可编辑的行为。我知道我可能会选择一个TextBox而只是改变IsEditable属性但是,在我的观点中,我需要DataContext,至少这就是我的想法。
在我的示例中,TextBlock工作正常,TextBox上的Text属性也可以正常工作但是对于Visibility部分,我想绑定到在其他某个层上找到的数据属性(EditMode,这是一个布尔值)。有没有办法将DataContext更改为,但仅限于可见性? Text属性应保持原样。
我应该尝试黑客攻击,定义一个不可见的复选框,单击我的编辑按钮时更改IsChecked并直接绑定到那个?我会尝试这个。我想是这样的,不需要改变DataContext。
答案 0 :(得分:1)
在我看来,你几乎就在那里,你应该可以使用RelativeSource来做到这一点。问题是你误用了ElementName,ElementName是绑定到命名源的属性,而是用来代替RelativeSource。您打算使用的是Path,它是可选的,如下所示。
<TextBox Visibility="{Binding DataContext.EditMode, RelativeSource={RelativeSource AncestorType={x:Type Window}},
Converter={StaticResource BoolToVis}}"
Text="{Binding Name}" TextAlignment="Center" />
答案 1 :(得分:1)
@FrumRoll是正确的,您可以使用DataContext
访问不在集合RelativeSource Binding
对象中的属性。但是,我不确定他们的代码是否正确......试试这个:
<TextBox Visibility="{Binding DataContext.EditMode, RelativeSource={RelativeSource
AncestorType={x:Type YourXamlPrefix:MainWindow}}}, Converter={StaticResource
BoolToVis}}" Text="{Binding Name}" TextAlignment="Center" />
显然,您需要使用本地XAML命名空间前缀更改YourXamlPrefix
值,并MainWindow
更改Window
的名称/类型(如果未调用{ {1}}。这也假定您已在MainWindow
。
EditMode
属性
此可能也有效,但并非专门寻找您的确切Window
,因此可能会出现问题:
Window