在XAML中,我有一个绑定到ObservableCollection<string>
的ItemsControl
在其内部作为ItemControl.ItemTemplate
,一个绑定到字符串的TextBox。
<ItemsControl ItemsSource="{x:Bind ViewModel.MyNames, Mode=TwoWay}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Mode=TwoWay}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
public ObservableCollection<string> MyNames = new ObservableCollection<string> {"aa", "bb", "cc" };
如果我编辑任何文本框,我会收到错误:
Error
Cannot save value from target back to source. Binding: Path='' DataItem='Windows.Foundation.IReference`1<String>';
target element is 'Windows.UI.Xaml.Controls.TextBox' (Name='null');
target property is 'Text' (type 'String')
如何将文本框链接到字符串值?当然,在尊重MVVM模式的同时。x:Bind
我不知道它是否可以绑定到ItemsSource
给出的默认值。
string
是不可变的,不能修改。
如果您只想在TextBoxes
中显示来自ObservableCollection<string>
的值,您可以使用OneWay
绑定:
<TextBox Text="{Binding Mode=OneWay}"/>
如果您想编辑值,则需要将ObservableCollection<string>
替换为ObservableCollection<YourType>
,其中YourType
是一种自定义类型,具有string
属性,可以设置为新值:
public class ViewModel
{
public ObservableCollection<CustomType> MyNames =
new ObservableCollection<CustomType>
{
new CustomType { Value ="aa" },
new CustomType { Value ="bb" },
new CustomType { Value ="cc" }
};
}
public class CustomType
{
public string Value { get; set; }
}
XAML:
<TextBox Text="{Binding Value}"/>