UWP 可观察集合<string>不绑定到文本框



在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}"/>

相关内容

  • 没有找到相关文章

最新更新