我想要做一件非常簡單的事情:我想在ItemsControl中顯示一個ObservableCollection。我也希望用戶能夠編輯ObservableCollection中的字符串。綁定到ObservableCollection <string>
我的視圖模型是非常簡單的:
public class MainViewModel : ViewModelBase
{
public ObservableCollection<string> Values { get; set; }
public MainViewModel()
{
Values = new ObservableCollection<string> { "foo", "bar" };
}
}
在我看來,我定義爲我的ItemsControl顯示每個項目裏面一個文本框一個DataTemplate,這裏沒有問題:
<ItemsControl ItemsSource="{Binding Values}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type sys:String}">
<TextBox Text="{Binding Path=., UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
一切似乎工作順利,我可以在我看來看到我的ObservableCollection的內容。但是,當我編輯文本框中的文本時,我的ObservableCollection未更新,值依然相同。
我發現,使這項工作的唯一解決方法是創建一個類:
public class StringWrapper
{
public string Value { get; set; }
}
然後我改變我的ObservableCollection的類型ObservableCollection<StringWrapper>
,並在我的DataTemplate中,我綁定的Text屬性我的TextBox值。它有效,但它很醜。
所以我的問題是,有沒有辦法將ObservableCollection綁定到ItemsControl並能夠更新值?
' '字符串不執行'INotifyPropertyChanged'。替換爲' –
Aron
@Aron:你爲什麼要回答評論? :/ – thomasb