2010-10-02 88 views
2

我嘗試實現ItemsControl的PrepareContainerForItemOverride方法。它會把項目放到TextBox中。它工作很好,但我怎樣才能綁定一個項目的文本框文本屬性?單向模式很好,但是當我想要雙向模式時,我必須知道路徑。在PrepareContainerForItemOverride方法中綁定

這裏是我的代碼:

protected override void PrepareContainerForItemOverride(DependencyObject element, object item) 
     { 
      base.PrepareContainerForItemOverride(element, item); 

      if (element is TextBox) 
      { 
       //((TextBox)element).Text = (string)item; 
       Binding binding = new Binding("I don't know what should i write here."); 
       binding.Mode = BindingMode.TwoWay; 
       ((TextBox)element).SetBinding(TextBox.TextProperty, binding); 
      } 
} 

謝謝您的幫助!

回答

1

如果問題代碼中的註釋行是之前的含義,則表示您提供的物品類型爲String。對字符串進行雙向綁定毫無意義,綁定不知道在哪裏分配新值。

正在顯示的項目類型需要是某個屬性類型爲String的對象,它將是您傳遞給Binding構造函數的此特權的名稱。

這表示不清楚爲什麼你甚至需要以這種方式子類ItemsControl。爲什麼不能: -

<ItemsControl ItemSource="{Binding SomeEnumberableOfObjectsThatHaveASomeStringProperty}"> 
    <ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <TextBox Test="{Binding SomeString, Mode=TwoWay}" /> 
    </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl>