使用mode = twoway进行数据绑定时出错

时间:2011-10-21 05:05:11

标签: silverlight binding

全部,   我在这里撞到了墙上。我需要的是简单的,我确信有一个简单的答案,但我似乎无法找到它。 情况:我有一个Silver light 4.0应用程序,我正在将一个字符串列表绑定到一个Items控件。在我的数据模板中,我有一个简单的文本框,我正在做非常基本的绑定“{Binding}”。我需要将绑定更新为twoway,以便编辑自动推回到我的datacontext。

在更新绑定之前,这是Items控件:

<ItemsControl x:Name="spLiftHeader" ItemsSource="{Binding Path=WeekLabels}">
   <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
             <StackPanel x:Name="spLiftHeader" Orientation="Horizontal" />
        </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>
   <ItemsControl.ItemTemplate>
         <DataTemplate>
              **<TextBox x:Name="txtWeekLbl" Text="{Binding}" Foreground="Black" Width="125" TextAlignment="Center"/>**
         </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

以下是绑定更改后的项控件:

<ItemsControl x:Name="spLiftHeader" ItemsSource="{Binding Path=WeekLabels}">
   <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
              <StackPanel x:Name="spLiftHeader" Orientation="Horizontal" />
        </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>
   <ItemsControl.ItemTemplate>
        <DataTemplate>
            **<TextBox x:Name="txtWeekLbl" Text="{Binding Mode=TwoWay}" Foreground="Black" Width="125" TextAlignment="Center"/>**
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

我只是简单地将“Mode = TwoWay”添加到绑定中。 更新后,我得到了惊人的无用错误4004 “System.Windows.Markup.XamlParseException:在'System.Windows.Data.Binding'上提供值引发异常”并且Line / Position引用点右边做了我更新的Binding。 如何将双向模式添加到简单绑定? 提前致谢。 尼克

2 个答案:

答案 0 :(得分:1)

对整个对象(在本例中为字符串)的双向绑定对Silverlight没有意义,因此抛出异常是正确的。惭愧它不是一个更有用的错误消息:)

当绑定中没有Path时,ItemsControl可以使用Object.ToString()获取值,但是它会在哪里存储结果?它不能替换字符串,因为需要将新的字符串对象放回集合中。双向绑定是通过对对象属性的反射来完成的。

使用包含字符串属性并显式绑定到该属性的某个新对象的列表,而不是简单的字符串列表。它将使一切变得更加容易。 (确保您的新类和属性实现INotifyPropertyChanged)。

答案 1 :(得分:0)

我不是100%肯定,但我不认为Mode=TwoWay应该在TextBox本身中设置。

如果不起作用,请同时尝试。但是,在任何一种情况下都不要使用List<T>作为项目控件后面的数据源。当其中一个项目发生更改时,列表不会触发更改事件。使用ObservableCollection<T>(来自System.Collections.ObjectModel命名空间)而不是List<T>