2013-09-23 50 views
0

我在主應用程序中有一個狀態欄,用於即時創建其他用戶控件。我想公開狀態欄,以便子用戶控件可以更新狀態欄。主應用程序的數據上下文被設置爲ConfigurationSettings的一個實例。我嘗試這個(不工作): 在XAML:將狀態欄數據綁定到另一個數據上下文

<StatusBar Grid.Row="2" Name="StatusBar"> 
     <StatusBarItem Grid.Column="0"> 
      <TextBlock Name="CurrentStatus">Ready</TextBlock> 
     </StatusBarItem> 

而在代碼隱藏我有(MainWindow類中)

// an inner class for data binding 
    // ViewModelBase is an class that inherits INotifyPrppertyChanged 
    class MainViewModel : ViewModelBase 
    { 
     public string _Status = ""; 

     public string Status 
     { 
      get { return _Status; } 
      set { _Status = value; OnPropertyChanged("Status"); } 
     } 
    } 
    private MainViewModel _MainViewModel; 

    public MainWindow() 
    { 
     configSettings = new ConfigurationSettings(); 
     InitializeComponent(); 
     this.DataContext = configSettings; 

     this._MainViewModel = new MainViewModel(); 
     this.StatusBar.DataContext = _MainViewModel; 
     Binding statusBinding = new Binding("Status"); 
     statusBinding.Source = this._MainViewModel._Status; 
     CurrentStatus.SetBinding(TextBlock.TextProperty, statusBinding); 
    } 

的ViewModelbase工作,因爲我用它在其他視圖楷模。

我得到的錯誤信息是:

BindingExpression path error: 'Status' property not found on 'object' ''String' (HashCode=36924794)'. BindingExpression:Path=Status; DataItem='String' (HashCode=36924794); target element is 'TextBlock' (Name='CurrentStatus'); target property is 'Text' (type 'String') 

回答

0

你不需要設置綁定Source這裏已經設置了DataContext所以刪除線下和你的綁定將工作:

statusBinding.Source = this._MainViewModel._Status; 

另外,因爲你已經爲你的StatusBar設置了DataContext,爲什麼不直接綁定xaml中的T​​extBlock,就像

<TextBlock Name="CurrentStatus" Text="{Binding Status}"></TextBlock> 
+0

方法1工作得很好。謝謝。 爲了學習,我嘗試了第二種方法。但是,它沒有工作。我都嘗試 '' 和 '' – Unplug

+0

它應該工作..你有沒有去除你設置綁定的代碼隱藏代碼?你也可以檢查它是否在輸出窗口中給出一些錯誤? – Nitin

+0

我註釋了這兩行 '//綁定statusBinding =新綁定(「狀態」);' '//CurrentStatus.SetBinding(TextBlock.TextProperty,statusBinding);' 沒有錯誤。 – Unplug

相關問題