2014-03-27 60 views
1

我有一個ListBox其中DataTemplate是可編輯的TextBox。我應該在哪裏設置Binding TwoWay?在ItemSource或在TextBox綁定?也許在兩個?它是如何工作的?它是繼承的嗎?所以如果我在ItemSource中設置綁定 - 是否在TextBox中繼承?列表框中的雙向綁定ItemTemplate

<ListBox HorizontalAlignment="Left" ItemsSource="{Binding Commands, Mode=TwoWay}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBox Text="{Binding Name}" /> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

itemssource與twoway綁定沒有意義,因爲您的itemscontrol永遠不會在您的視圖模型中設置集合 – blindmeis

回答

1

Where should I set Binding TwoWay?

應將此模式TextBox這樣的:

<TextBox Text="{Binding Path=Name, Mode=TwoWay}" /> 

如果我沒有錯,Text屬性列出了TwoWay模式通過default。因此,它的建設並不是必需的。

MSDN

當數據綁定方案中使用,這個屬性使用的UpdateSourceTrigger.LostFocus默認的更新行爲。

,這意味着更新的屬性是可見的一次,你需要設置屬性UpdateSourceTriggerPropertyChanged

<TextBox Text="{Binding Path=Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 

So if I set Binding in ItemSource - is it inherited in TextBox?

沒有,繼承不會,因爲每個依賴項屬性都使用獨特的Binding設置。使用DataContext時會發生繼承,但同樣,每個屬性的設置都是唯一的。

1

雙向綁定應設置爲您需要顯示的項目,在這種情況下,文本框。在這裏你需要耦合回你的datacontext。您可能需要考慮將UpdateSourceTrigger屬性設置爲PropertChanged。 這樣,即使沒有失去焦點,您也將始終輸入文字的值。

itemsource不應該是雙向的。有一種方法可行,因爲你很可能會綁定到可觀察的集合。這隻會從您的datacontext中設置一次。這會自動處理添加和刪除項目到您的收藏。

我想補充你的代碼是這樣的:

<ListBox Margin="10,0,0,0" Width="200" HorizontalAlignment="Left" ItemsSource="{Binding Commands}" > 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <TextBox Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox>