2012-03-29 91 views
0

我覺得這應該很容易,但我已經花了最近幾個小時嘗試解決方案,沒有任何東西似乎工作。將XAML屬性綁定到代碼隱藏的任意對象

我在XAML代碼中有一個對象,我想將它的一個屬性綁定到在c#代碼隱藏中創建的對象。這是迄今爲止我的策略:

<setpwindows:ScalingWindow 
    ... 
> 
    <setpwindows:ScalingWindow.Resources> 
     <localwpf:ObjectProvider x:Key="locationProvider"/> 
    </setpwindows:ScalingWindow.Resources> 
    ... 
     ... 
      <DataGridTextColumn 
       Header="Code Out" 
       Binding="{Binding Source={StaticResource locationProvider}, Path=Obj.Name}" 
      /> 
     ... 
    ... 
</setpwindows:ScalingWindow> 

與ObjectProvider如下:窗口被初始化

class ObjectProvider : DependencyObject 
{ 
    private object _obj; 
    public object Obj 
    { 
     get { System.Diagnostics.Debug.WriteLine("Got object as " + _obj); return _obj; } 
     set { _obj = value; System.Diagnostics.Debug.WriteLine("Set object to " + _obj); } 
    } 

    public static readonly DependencyProperty ObjProperty = DependencyProperty.Register("Obj", typeof(object), typeof(ObjectProvider)); 

    public ObjectProvider() {} 
} 

後,我設置的OBJ這樣的:

WPFObjects.ObjectProvider locProv = this.FindResource("locationProvider") as WPFObjects.ObjectProvider; 
locProv.Obj = _tempLocation; 

這次終於沒有給我在輸出窗口中綁定錯誤,但它實際上並沒有綁定任何東西。這樣做的標準方式是什麼?

+0

你必須學習依賴屬性和從零開始綁定 – sll 2012-03-29 20:05:21

回答

3

這是各種錯誤的,這裏只是幾個指針:

  • 依賴屬性都是綁定的目標,而不是源。
  • 你是否在任何地方設置了Obj?這是你設置的名稱屬性嗎?

然後,瞭解FrameworkElement.DataContext,你可以實現有關數據源變更時通知依賴屬性的通知接口。參見他人的代碼hiw例如ViewModel看起來像以及它們如何綁定到UI。

+0

感謝您的提示,我仍然很困惑。我已經看到了無數的例子和教訓(可能是錯誤的),但他們都沒有告訴我如何(1)在c#中創建一個對象,(2)將它傳遞給XAML,(3)綁定一個XAML對象的屬性到c#對象的成員。特別是對於像DataGridTextColumn這樣不能接受DataContext參數的東西。我使用依賴屬性的原因是因爲它給我綁定錯誤,說我必須。在窗口初始化之後,我確實設置了Obj;我現在已經包含了上面的代碼。 – hypehuman 2012-03-29 21:01:31

+0

對不起,我在這裏吠叫錯了樹。我的問題並不是真的具有約束力。這是一段非常長的路徑,我着手解決datagrid文本列的錯誤。我會問另一個問題。 – hypehuman 2012-03-29 21:18:11

相關問題