我在将TextBox绑定到字符串时遇到问题(StringBuilder也有同样的问题)。
这是xaml:
<ListBox x:Name="MyList" ItemsSource="{Binding ListOfBullets, Mode=TwoWay, Converter=StaticResourcedebugConverter}}">
<ListBox.ItemTemplate>
<DataTemplate>
<local:TaskStepControl Text="{Binding Mode=TwoWay}" AddHnadler="{Binding DelegateForHandlingAddTaskStep, ElementName=uc}"></local:TaskStepControl>
</DataTemplate>
</ListBox.ItemTemplate>
和ListBox的项目是:
public ObservableCollection<StringBuilder> ListOfBullets{get{....} set{....}}
我也尝试过:
public ObservableCollection<string> ListOfBullets{get{....} set{....}}
如果我运行该应用程序,我会收到一个无法解除的异常“参数不正确”。 如果我删除Mode = TwoWay然后它可以工作,但正如预期编辑文本框不会更改ListOfBullets中的文本绑定对象;
我做错了什么?
答案 0 :(得分:1)
MSDN says您不能使用空属性路径进行双向绑定。
我猜绑定引擎只能对特定属性执行双向绑定,而不能对对象本身执行双向绑定。
我对不允许这样做的想法:
为了简单起见,您可以认为TwoWay绑定的“写入”部分只是为您的数据源对象设置了提供的值。所以这个标记Text={Binding Name, Mode=TwoWay}
类似于C#代码:dataSource.Name = textBox.Text
关于文本更新(当然,整个绑定工作流程要复杂得多,并在幕后做其他事情,但现在没关系)。
您的示例尝试执行类似listItem = textBox.Text
的操作,但不会更新 ListOfBullets 的实际项目。请记住,我已经大大简化了绑定的工作方式,只是为了让您了解正在发生的事情。
你能做什么:
创建一个包装 Model 类,它将包含您的字符串值并绑定到
public ObservableCollection<Model> ListOfBullets {get; set;}
<local:TaskStepControl Text={Binding Value, Mode=TwoWay} />