我有一个usercontrol,我将其包含在我的datagrid列中。 但我想在某些条件的基础上隐藏该用户控件。 我尝试绑定该用户控件的可见性,但这不起作用。我不知道为什么会发生这种情况。
<DataGrid>
... .
...
<UserControl:MyUserControl Visibility="{Binding
SomeProperty,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
</DataGrid>
但是如果我在隐藏DataGrid列中存在的其他控件时使用相同的属性。它们正在工作并且在特定条件下隐藏。
我不知道发生了什么。请帮助我们。
答案 0 :(得分:0)
尝试显式设置UserControl的DataContext属性:
<UserControl:MyUserControl DataContext="{Binding}" Visibility="{Binding
SomeProperty,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
否则显示dataGrid的完整xaml。
答案 1 :(得分:0)
由于您的控件嵌套在DataGrid中,因此数据绑定的DataContext与DataGrid上下文相同。
因此,您可以选择将元素的可见性绑定到DataGrid DataContext的属性,也可以将其绑定到相对UI父DataContext或prox的属性。
我将以下模型为例。
public class ViewModel
{
public class Foo
{
public int Id {get;set;}
public Visibility IsVisible {get;set;}
}
private IList<Foo> _fooList;
public IList<Foo> FooList {get;set;}
private Visibility _parentVisibility;
public Visibility ParentVisibility{get;set}
}
解决方案1(DataGrid datacontext):
假设您的datagrid绑定到FooList
,您可以直接绑定到IsVisible
对象的Foo
属性:
<UserControl:MyUserControl Visibility="{Binding IsVisible}" />
解决方案2(家长背景):
如果要将UserControl的可见性绑定到不在datagrid上下文中的属性,则必须为绑定指定RelativeSource
或DataContextProxy
。
转到RelativeSource
解决方案,您可以将UserControl的可见性绑定到ParentVisibility
属性,如下所示:
<UserControl:MyUserControl Visibility="{Binding DataContext.ParentVisibility, RelativeSource={RelativeSource FindAncestor, AncestorType=YourPageUserControl}" />
希望这有帮助。
答案 2 :(得分:0)
我很确定输出或立即窗口中存在绑定错误。
为什么?
因为你的控件正在集合实体中寻找SomeProperty
,而不是那里。
您建议的属性可在Page ViewModel级别获得。
因此这样做
<UserControl:MyUserControl
Visibility="{Binding DataContext.IsVisible,
RelativeSource={RelativeSource FindAncestor,
AncestorType=YourUserControl}" />