【问题标题】:Windows phone Exception on TwoWay DataBinding of TextBox item of a Listbox列表框的文本框项的双向数据绑定的 Windows phone 异常
【发布时间】:2012-05-05 10:36:48
【问题描述】:

我在将 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 的 Items 是:

public ObservableCollection<StringBuilder> ListOfBullets{get{....} set{....}}

我也试过了:

public ObservableCollection<string> ListOfBullets{get{....} set{....}}

如果我运行该应用程序,我会收到一个未停止的异常“参数不正确。” 如果我删除 Mode=TwoWay 那么它可以工作,但正如预期的那样,编辑文本框不会更改 ListOfBullets 中的文本绑定对象;

我做错了什么?

【问题讨论】:

    标签: windows-phone-7 xaml listbox


    【解决方案1】:

    MSDN says,您不能使用空属性路径进行双向绑定。

    我猜绑定引擎只能对特定属性执行双向绑定,而不是对对象本身。

    我对为什么不允许这样做的想法:

    为简单起见,您可以认为 TwoWay 绑定的“写入”部分只是在数据源对象上设置提供的值。所以这个标记 Text={Binding Name, Mode=TwoWay} 类似于 C# 代码:dataSource.Name = textBox.Text 文本更新(当然,整个绑定工作流程要复杂得多,并且在幕后做其他事情,但现在没关系了)。

    您的示例尝试执行类似listItem = textBox.Text 的操作,这不会更新您的ListOfBullets 的实际项目。请记住,我已经大大简化了绑定的工作方式,只是为了让您了解正在发生的事情。

    你能做什么:

    创建一个包装器 Model 类,该类将包含您的字符串值并绑定到

    public ObservableCollection&lt;Model&gt; ListOfBullets {get; set;}

    &lt;local:TaskStepControl Text={Binding Value, Mode=TwoWay} /&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 2020-04-03
      • 2011-11-22
      相关资源
      最近更新 更多