【问题标题】:Force type on IntelliSense autocompletion in XAML BindingXAML 绑定中的 IntelliSense 自动完成强制类型
【发布时间】:2023-03-23 09:52:01
【问题描述】:

我正在处理一些相当大的 WPF 项目,其中包含大量的类和 XAML 设计文件。

但有一件事让我抓狂:IntelliSense 绑定自动完成有时不会显示正确的值(主要是在我无法提供正确的DataType 并且没有使用任何烘焙的情况下,例如Page 内容类型)

因此实际的问题是:有没有办法强制 IntelliSense 使用某种类型的自动完成功能?

作为随机示例,以这个 XAML

<DataTemplate xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              DataType="{x:Type Accounting}">
    <ListView ItemsSource="{Binding Payments}">
        <ListView.View>
            <GridView>
                <!--
                    Auto completion still assumes the type is Accounting
                    and displays the properties of Accounting instead of
                    the required Payments.
                -->
                <GridViewColumn DisplayMemberBinding="{Binding Bank}"/>
            </GridView>
        </ListView.View>
    </ListView>
</DataTemplate>

这对于 C# 类

public class Accounting
{
    public List<Payment> Payments { get; set; }
}

public class Payment
{
    public string Bank { get; set; }
}

【问题讨论】:

  • 您可以使用 {Binding Path=(xmlNameSpace:TypeName.PropertyName)} 的形式来强制类型并完成 PropertyName。
  • 嗨 X39,这个问题有什么更新吗?如果 Bradley 的回复有助于解决您的问题。您可以考虑将其标记为答案。如果仍然存在,请在创建一个具有类似结构的简单 wpf 项目后检查是否存在相同的问题。

标签: c# wpf visual-studio xaml intellisense


【解决方案1】:

您可以使用表单{Binding Path=(xmlNameSpace:TypeName.PropertyName)} 来强制类型并在 PropertyName 上完成。

这会导致Binding 将路径视为attached property,当附加属性类型与绑定类型相同时,它会回退到“常规”属性。我不确定尝试将其解析为附加属性是否有任何额外开销,但 Visual Studio 足以在您键入时开始自动完成属性。我认为它有点像 hack,因为它绝对不是这种语法的预期用途,

在您的具体示例中,它看起来像(根据您的命名空间进行调整):

<GridViewColumn DisplayMemberBinding="{Binding Path=(local:Payment.Bank)}"/>

【讨论】:

  • 这在某种程度上有效,我至少现在将错别字正确标记为错误,但遗憾的是没有自动完成:(
  • 奇怪,当我使用这种模式时,我得到了一个真正的自动完成菜单(添加了屏幕截图)。
  • 现在只有在 mousehover 上显示正确的类型 + 错别字下划线等。所以......有些东西正在工作
  • 就像一个微妙的注释:这在某种程度上是可行的,这意味着..最终仍然必须删除它的“滥用”才能使其正常工作有时。然而,它做了所要求的:在大多数情况下允许自动完成(同样,有类仍然无法工作......无法真正说明为什么它有时会起作用,有时会不起作用......没有共同的方案)
  • 另一个迟到但非常非常重要的注意事项:Path= 是此功能正常工作所必需的
猜你喜欢
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 2015-04-07
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多