将窗口项绑定到资源属性

时间:2012-01-23 13:12:59

标签: c# wpf data-binding resources

我有一个WPF测试窗口,在该窗口中我声明了一个窗口资源,我希望将窗口的datacontext绑定到该资源对象上的依赖属性。这是我的例子:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"

        xmlns:local="clr-namespace:WpfApplication1"
        xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"
        >

    <Window.Resources>
        <local:TestObj x:Key="MyResObj" Target="{Binding DataContext, diagnostics:PresentationTraceSources.TraceLevel=High}" />
    </Window.Resources> 

    <Grid>
        <TextBox Tag="{StaticResource MyResObj}" />
    </Grid>
</Window>

和背后的代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        this.DataContext = this;

        InitializeComponent();
    }
}

这是我的TestObj:

namespace WpfApplication1
{
    public class TestObj : DependencyObject
    {

        public static readonly DependencyProperty TargetProperty = DependencyProperty.Register("Target", typeof(object), typeof(TestObj));

        public object Target
        {
            get { return this.GetValue(TargetProperty); }
            set { SetValue(TargetProperty, value); }
        }

    }
}

这是一个简化的例子,我想最终将更复杂的东西从窗口绑定到Window.Resources部分中声明的项目。目前这没有按照我的预期工作,因此我启用了详细的绑定日志记录 - 我得到的绑定错误是

  

System.Windows.Data警告:54:为绑定创建BindingExpression(hash = 38018250)(hash = 40782967)
  System.Windows.Data警告:56:路径:'DataContext'
  System.Windows.Data警告:58:BindingExpression(hash = 38018250):默认模式已解决为OneWay
  System.Windows.Data警告:59:BindingExpression(hash = 38018250):解析为PropertyChanged的默认更新触发器
  System.Windows.Data警告:60:BindingExpression(hash = 38018250):附加到WpfApplication16.TestObj.Target(hash = 39268741)
  System.Windows.Data警告:62:BindingExpression(hash = 38018250):使用框架导师
  System.Windows.Data警告:65:BindingExpression(hash = 38018250):解析源
  System.Windows.Data警告:67:BindingExpression(hash = 38018250):找不到框架导师
  System.Windows.Data警告:63:BindingExpression(hash = 38018250):解析源延迟
  'WpfApplication16.vshost.exe'(托管(v4.0.30319)):已加载'C:\ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ PresentationFramework.Aero \ v4.0_4.0.0.0__31bf3856ad364e35 \ PresentationFramework.Aero.dll'<登记/>   System.Windows.Data警告:65:BindingExpression(hash = 38018250):解析源
  System.Windows.Data警告:67:BindingExpression(hash = 38018250):找不到框架导师
  System.Windows.Data警告:65:BindingExpression(hash = 38018250):解析源(最后机会)
  System.Windows.Data警告:67:BindingExpression(hash = 38018250):找不到框架导师
  System.Windows.Data错误:2:找不到目标元素的管理FrameworkElement或FrameworkContentElement。 BindingExpression:路径= DataContext的;的DataItem = NULL; target元素是'TestObj'(HashCode = 39268741); target属性是'Target'(类型'Object')

甚至可以将窗口项绑定到这样的资源吗?或者我的绑定错误了吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你不能在自己的资源中绑定到根对象(但不要引用它)。您可以尝试将子网格绑定到它吗?

<Grid>
    <Grid.Resources>
        <local:TestObj x:Key="MyResObj" Target="{Binding DataContext, diagnostics:PresentationTraceSources.TraceLevel=High}" />
    </Grid.Resources> 
    <TextBox Tag="{StaticResource MyResObj}" />
</Grid>

我不确定资源是否知道逻辑树:/