【问题标题】:setting data context of silverlight user control leaves the control as always visible设置 silverlight 用户控件的数据上下文使控件始终可见
【发布时间】:2010-11-30 10:39:04
【问题描述】:

我在名为 Mainpage.xaml 的 Silverlight 页面中有一个“searchwin.xaml”用户控件。 “searchwin”有自己的视图模型“searhwinVM”。我已经像这样在主页 xaml 中将 searchwin 的 datacontext 设置为其视图模型

<UserControl.Resources>
<vm:SearchWin  x:Name="SearchWinVM" x:Key="SearchWinVM" /> </UserControl.Resources>

<part:SearchWin ..... {other properties here}
Visibility="{Binding Converter={StaticResource BooleanToVisibilityConverter}, Path=IsSearchVisible}"
DataContext="{StaticResource SearchWinVM}"/>

我想将此搜索控件默认设置为不可见,并且仅当我更改为位于 mainpage.xaml 上的列表框中的特定值时才可见。在 mainpage.xaml 中或以编程方式在 mainpage.xaml.cs 中设置 UC 的数据上下文会导致控件始终可见。我现在藏不住了。如果我删除数据上下文,它会按预期工作。任何想法如何解决这个问题?

感谢您的宝贵时间...

【问题讨论】:

    标签: silverlight xaml user-controls visibility


    【解决方案1】:

    您是否确认您的转换器正在被调用?我只是放一个断点,看看会发生什么。

    【讨论】:

    • 是的,它正在被调用。在同一代码中,当我取出 DataContext="{StaticResource SearchWinVM}" .. 它按预期工作。一些如何在 xaml 或 mainpage.xaml.cs 中设置 datacontext 使控件永远可见!
    • 因此,如果正在调用它,参数(应该映射到 IsSearchVisible)是否具有所需的值(显然,您希望这是错误的),如果是,您的转换器是否返回对应的 Visibility 值(应该是 Collapsed)?
    • 在 xaml 中设置数据上下文时,它似乎没有调用 BooleanToVisibilityConverter。奇怪的! ...当我取消 DataContext 属性时,它可以工作.. DataContext 与我的转换器是否被调用有什么关系..?
    • 好吧,你正在绑定到 IsSearchVisible。如果设置了 DataContext,则此属性将引用 DataContext 对象,因此它与它有关。如果您删除 DataContext,我不明白您说“它有效”的部分 - 如果没有 DataContext,转换器将绑定到什么?
    • 我想我明白了。当搜索控件上没有设置 DataContext 时,将使用父级(或父级的父级等)的。由于您的主 VM 包含匹配属性,所以一切都很好。一旦你设置了搜索虚拟机,因为它不包含 IsSearchVisible 属性,代码当然不会工作。你期望会发生什么?这是完全正常的。
    猜你喜欢
    • 2012-12-16
    • 2017-11-11
    • 2015-04-13
    • 1970-01-01
    • 2018-05-02
    • 2013-04-15
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多