2010-10-31 111 views
0

說我有XAML像WPF:綁定無法正常工作

<TabControl Grid.Row="1" Grid.Column="2" ItemsSource="{Binding Tabs}" IsSynchronizedWithCurrentItem="True"> 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding TabTitle}" /> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <local:UserControl1 Text="{Binding Text}" /> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 

我要問哪裏的TabTitleText性從何而來?我認爲應該來自Tabs的每一項權利?說標籤是ObservableCollection<TabViewModel>TabTitle & Text應該從TabViewModel屬性權利。但在某種程度上似乎是正確的。 TabTitle正確填充,而Text不正確。

TextUserControl1如下

public string Text 
{ 
    get { return (string)GetValue(TextProperty); } 
    set { SetValue(TextProperty, value); } 
} 

public static readonly DependencyProperty TextProperty = 
    DependencyProperty.Register("Text", typeof(string), typeof(UserControl1), new UIPropertyMetadata("")); 

當我有沒有綁定到ObservableCollection<TabViewModel>綁定選項卡工作正常

<TabControl Grid.Row="1" Grid.Column="1"> 
    <TabItem Header="Tab 1"> 
     <local:UserControl1 Text="Hello" /> 
    </TabItem> 
    <TabItem Header="Tab 2"> 
     <local:UserControl1 Text="World" /> 
    </TabItem> 
</TabControl> 
+0

檢查輸出窗口是否存在綁定錯誤 – benPearce 2010-10-31 04:59:22

+0

您是否使用某個值初始化TabViewModel.Text?或者它是空的?另外,您的TabViewModel是否實現INotifyPropertyChanged接口? – Nawaz 2010-12-01 06:19:10

回答

0

如果從暴食用戶控件的屬性代碼隱藏文件,你應該使用

{Binding RelativeSource={RelativeSource Mode=Self}, Path=Text} 

直接綁定只適用於DataContext

0

我想我知道是什麼問題聲明爲一個依賴屬性。 UserControl1中的元素(應該由Text屬性填充)不會觀察此屬性的更改。因此,有兩種方式:

1)使用PropertyChangedCallback:

public static readonly DependencyProperty TextProperty = 
DependencyProperty.Register("Text", typeof(string), typeof(UserControl1), new UIPropertyMetadata(""), 
    new PropertyChangedCallback(OnTextPropertyChanged)); 

private static void OnTextPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
{ 
    ((UserControl1)sender).OnTextChanged(); 
} 

private void OnTextChanged() 
{ 
    this.myTextBlock.Text = this.Text; 
} 

2)整蠱綁定:

<UserControl x:Class="UserControl1" x:Name="root" ...> 
... 
    <TextBlock Text="{Binding Text, ElementName=root}"/> 
... 
</UserControl> 
+0

嗯...這仍然不起作用,沒有任何錯誤壽。我還認爲'DependencyProperty.Register'的語法是'public static readonly DependencyProperty TextProperty = DependencyProperty.Register(「Text」,typeof(string),typeof(UserControl1),new UIPropertyMetadata(「」,new PropertyChangedCallback(OnTextChanged))) ;' – 2010-11-02 08:07:34

+0

將一個斷點放入TextChanged處理程序並檢查屬性的值。 – vorrtex 2010-11-03 21:48:10

相關問題