列表框的TextBox项的双向数据绑定上的Windows手机异常

时间:2012-05-05 10:36:49

标签: windows-phone-7 xaml listbox

我在将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中的文本绑定对象;

我做错了什么?

1 个答案:

答案 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} />