我使用MVVM将List<string>
绑定到WPF中的ListBox
目前我有
<ListBox ItemsSource="{Binding FileContents}"></ListBox>
我的ViewModel中的文件内容只是
public List<string> FileContents {get;set;}
FileContents值在ViewModel的构造函数中设置,因此无需担心INotifyProperty
到目前为止一切正常。我可以根据需要看到ListBox
中显示的列表。
现在我需要提供一个模板!这是出错的地方
<ListBox ItemsSource="{Binding FileContents}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这就是出错的地方!我的理解是我只需要执行<TextBox Text = "{Binding}"
因为ListBox已绑定到List<string>
属性(称为FileContents)
但是,当我运行上面的Visual Studio给我时
应用程序处于中断模式
如果我将代码更新为
<TextBox Text = "Some String Value"
然后它工作正常
我不明白我做错了什么。
答案 0 :(得分:2)
将Mode
的{{1}}设置为Binding
:
OneWay
<TextBox Text="{Binding Path=., Mode=OneWay}" />
的{{1}}属性的默认绑定模式为Text
但是当您绑定到{TextBox
时,这不会起作用TwoWay
1}}。
答案 1 :(得分:2)
直接绑定到string
只能是一种方式。这意味着您只能像
<TextBox Text="{Binding Mode=OneWay}"/>
或
<TextBox Text="{Binding .}"/>
原因很简单:更改字符串意味着您要删除项目并将其添加到列表中。通过更改TextBox中的字符串,这是不可能的。
解决方案是将内容包装在类
中public class FileContent
{
public string Content { get; set; }
}
并使用List<FileContent>
作为模板绑定到<TextBox Text="{Binding Content}"/>
列表。