wpf如何绑定到DataContext存在?

2024-01-08

我在代码中动态设置数据上下文。我希望屏幕上的按钮能够启用/禁用,具体取决于是否DataContext == null或不。当我分配 DataContext 时,我可以在代码中执行此操作,但如果我可以像这样绑定那就更好了:)


您应该能够使用DataTrigger在按钮样式上禁用按钮DataContext一片空白。另一种选择是绑定IsEnabled财产给DataContext并使用值转换器返回false if DataContext为空并且true否则。

带触发器:

<Button>
   <Button.Style>
       <Style TargetType="{x:Type Button}">
          <Style.Triggers>
             <DataTrigger Binding="{Binding Path=DataContext, RelativeSource={RelativeSource Self}}" Value="{x:Null}">
                 <Setter Property="IsEnabled" Value="false"/>
             </DataTrigger>
          </Style.Triggers>
       </Style>
   </Button.Style>
</Button>

带转换器:

转换器:

public class DataContextSetConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value != null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

并使用它

<UserControl.Resources>
   <local:DataContextSetConverter x:Key="dataContextSetConverter"/>
</UserControl.Resources>

...

<Button IsEnabled="{Binding Path=DataContext, RelativeSource={RelativeSource Self}, Converter={StaticResource dataContextSetConverter}}"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wpf如何绑定到DataContext存在? 的相关文章

随机推荐

  • 选择
    之间的文本

    是否可以在之间选择文本标签 我正在使用下面的预格式化代码尝试选择此数据 New York NY 10012 我玩过 address find br eq 2 text 但知道一定有更好的方法 div Joe Dirt br PO Box 8
  • 为什么 JavaScript 和 HTML 分离是一个好的实践? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我一直在阅读有关 JavaScript 的一些良好实践 其中之一是不引人注目的 JavaScript http en wikipedia org
  • 为什么我无法使用 google chrome 登录 magento 后端

    我正在使用 magento 社区版 1 7 0 2 我无法登录到 magento 后端 我知道这个问题可能是因为 chrome 不接受 cookie 但如何解决这个问题 请帮忙 谢谢 If you 为 Magento 管理面板启用 http
  • 为什么 Sencha Touch 中没有同步回调?

    我希望能够在商店同步成功完成后向用户显示一条消息 但是 似乎没有任何方法可以使用回调或同步调用它 我有点惊讶这不是开箱即用的 因为这一定是一个常见问题 有什么解决方法吗 我们花了很长时间才找到适当的解决方案 最后 我们向商店的写入事件添加了
  • 如何在 FluentUI 模式控件中创建粘性(不可滚动)页眉/页脚?

    使用 React Fluent UI 模态控件 有人可以告诉我如何 确保页眉和页脚不是可滚动内容的一部分 即它们是 粘性 的 而如果窗口大小不足 位于它们之间的主要内容是可滚动的 随着内容变化 最小化模态大小的变化 即视口的窗口大小与最初一
  • 奇怪的运算符优先级与 ?? (空合并运算符)

    最近我遇到了一个奇怪的错误 我将一个字符串与一个字符串连接起来int 然后添加另一个字符串 我的代码基本上与此等效 int x 10 string s foo x 0 bar 令人惊讶的是 这将运行和编译 而不会出现警告或不兼容的类型错误
  • 转换日期 (05/12/2011 至 12th)

    我正在尝试将日期转换为日期数字 后跟 st nd rd 或 th 具体取决于日期 我是 JavaScript 新手 所以不知道从哪里开始 E g 2011 年 5 月 1 日 第一2011 年 5 月 2 日 第二次2011 年 5 月 3
  • 强制 selectize.js 仅显示以用户输入开头的选项

    我正在使用 selectize js 目前它看起来像这样 它不仅显示以 arm 开头的单词 还显示在其他位置包含 arm 作为子字符串的单词 或选项 我想强制该函数仅显示以 arm 开头的单词 或选项 我检查了使用文档https githu
  • Spark saveAsTextFile() 写入多个文件而不是一个[重复]

    这个问题在这里已经有答案了 我现在在我的笔记本电脑上使用 Spark 和 Scala 当我将 RDD 写入文件时 输出将写入两个文件 part 00000 和 part 00001 我如何强制 Spark Scala写入一个文件 我的代码目
  • 根据第二个文本文件从文本文件中删除重复项

    如何从文本文件中删除所有行 main txt 通过检查第二个文本文件 removethese txt 什么是有效的方法如果文件大于 10 100mb 使用苹果电脑 Example main txt 3 1 2 5 删除这些行 removet
  • iPhone SDK:如何创建一个在点击位置插入文本的 UITextView?

    我想创建一个 UITextView 您可以点击其中的任何位置并开始在该位置键入 该控件的默认行为是从最后一个字符结束处开始键入 因此 如果我有一个没有文本的 UITextView 并点击控件的中间 我想从那里开始输入 而不是从左上角开始 实
  • 如何合并两个大型数据集,同时在r中生成具有不同重复值的新列

    我有一个让我抓狂的问题 真的需要你的帮助 简化的问题是这样的 d1 lt data table v1 c a b c d d b a c a d b a v2 seq 1 12 V3 rep 1 4 times 3 d2 lt data t
  • Julia:为类型实现标准数学运算

    有没有办法在 julia 中为用户创建的类型实现基本算术 例如 type Foo bar Float32 foo Int32 end a Foo 3 23 23 b Foo 4 56 54 c a b 如果可能的话 我怎样才能做到这一点 提
  • 树视图闪烁,没有任何事件

    我有一个闪烁TreeView我知道这是一个常见问题 事情是TreeView没有事件 是的 我明白 当我从 a 递归添加节点时XmlDocument它有点闪烁 这是正常的 即使所有内容都加载后 我的也会闪烁 当我的鼠标悬停在节点上或单击节点时
  • SFINAE 在类型和非类型模板参数的情况下工作方式不同

    为什么这段代码有效 template lt typename T std enable if t
  • 获取数据表中某一列的行索引

    1 2 3 A B C D E F G H I System Data DataTable dt new DataTable dt Columns Add 1 dt Columns Add 2 dt Columns Add 3 dt Row
  • 在 Mercurial 中编写自定义日志关键字过滤器作为扩展

    我已经检查了有关如何编写 Mercurial 扩展的教程 我想知道如何专门为日志关键字添加过滤器 感谢帮助 我认为一个例子可以最好地解释它 from mercurial import templatefilters def upper s
  • VS2010项目依赖

    我在 VS2010 中有一个 C 项目和一个 C 项目 该项目将使用此 C 项目输出 它将其用于 p invoke 我想我可以通过编辑解决方案中的 项目依赖项 来确保 c 项目在 c 项目之前构建 但这似乎没有任何效果 我的构建服务器上的构
  • 无法在 Windows 10 上使用 docker 访问 localhost:8080

    当运行我的docker compose development yaml在我的电脑上 我无法连接到http localhost 8080 另外 我可以跑步docker compose f docker compose development
  • wpf如何绑定到DataContext存在?

    我在代码中动态设置数据上下文 我希望屏幕上的按钮能够启用 禁用 具体取决于是否DataContext null或不 当我分配 DataContext 时 我可以在代码中执行此操作 但如果我可以像这样绑定那就更好了 您应该能够使用DataTr