如何在WPF中正确绑定数据上下文的相对源?

3

我在XAML中的模板中定义了RelativeSource,代码如下:

DataContext="{Binding RelativeSource={RelativeSource Self}}"

我遇到了一个异常。

"在PresentationFramework.dll中出现了类型为'System.Windows.Markup.XamlParseException'的第一次机会异常

其他信息:'System.Windows.Markup.StaticResourceHolder'上提供的值引发了异常。"

我认为问题在于我需要在Window.Resources声明之后绑定它,但是我不知道如何使用<DataContext>标记来实现这一点,并仍然使用RelativeSource。谢谢!

<Window x:Class="SupportDesk.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Top Echelon Support Desk" Height="554" Width="743" xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit" xmlns:myNewNamespace="clr-namespace:SupportDesk"
    DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Window.Resources>
    <myNewNamespace:BoolToVisibilityConverter x:Key="boolToVis" />

    <Style TargetType="{x:Type TextBlock}"
  x:Key="GridBlockStyle">
        <Setter Property="VerticalAlignment" Value="Center" />
        <Setter Property="Visibility"
 Value="{Binding Path=IsSelected,
     RelativeSource={RelativeSource FindAncestor,
         AncestorType={x:Type ListViewItem}},
     Converter={StaticResource boolToVis},
         ConverterParameter=False}" />
    </Style>
</Window.Resources>

我认为你需要提供更多细节。你能提供一些代码片段吗? - ColinE
当然,这是我的XAML信息: - Drew
嗯,要怎样才能最好地发布这个呢? - Drew
仅仅通过在线研究,我认为异常发生的原因是因为RelativeSource声明在我的Window.Resources部分之前。但是无论我看到哪里,RelativeSource总是绑定到特定元素,而我正在使用来自WPF Toolkit的三个AutocompleteBox引用它。我想使用DataContext标签声明它,但我认为这是不可能的。 - Drew
1个回答

3
如何在窗口的直接子级上设置DataContext呢?例如:
<Window>
   <Grid DataContext="{Binding RelativeSource={RelativeSource Self}}">
   </Grid>
</Window>

这个对你管用吗?

谢谢您的帮助。当我这样做时,异常已经消失了,但是现在我的列表视图中没有返回任何数据。基本上,我有三个自动完成框,当选择一个值时,我运行一个查询并在列表视图中返回结果。现在数据不再被返回。 - Drew
是时候进行一些调试了!如果您设置了断点,ListView的DataContext是什么?Grid的呢?... - ColinE
还有,为什么你在使用相对源自绑定?通常这只用于UI控件,而不是窗口/表单。 - ColinE
我不是很确定,应该使用什么? - Drew
无论如何,它一直在工作,直到最近我的问题出现了,这是由于我试图允许在列表视图中编辑字段。谢谢你的建议,我会解决的... - Drew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接