2012-01-18 69 views
0

我正在使用Microsoft活动库设计器;对于一些原因,我需要用列表框来显示一些信息在它。但是我有一个问题,它的的ItemsSource binding.My活动端的属性是这样的:XAML列表框项绑定到活动

private ObservableCollection<string> _selectedItems; 
    public ObservableCollection<string> SelectedItems 
    { 
     get 
     { 
      if (_selectedItems == null) 
      { 
       ObservableCollection<string> items = new ObservableCollection<string>(); 
       return items; 
      } 
      return _selectedItems; 
     } 
     set 
     { 
      _selectedItems = value; 
     } 
    } 

我的XAML端代码是这个样子:

.... 
<Button Content="Add Item" HorizontalAlignment="Stretch" Grid.Column="0" 
     Click="Button_Click" Margin="5, 0, 5, 5"/> 

<Button Content="Remove Item" HorizontalAlignment="Stretch" Grid.Column="1" 
     Click="DelButton_Click" Margin="5, 0, 5, 5"/> 
.... 
<ListBox x:Name="LstSelectedPosts" MinHeight="20" ItemsSource="{Binding Path=ModelItem.Selecteditems, Mode=TwoWay}"/> 
.... 

现在,当我尝试添加/从这个列表框在删除的项目/添加项目移除项按钮单击事件,调试器向我显示一个错误,告诉我无法修改ListBox绑定源。 那么如何更改此列表框的项目?

回答

1

确定您的代码中有可能导致问题的错误。 在吸气,我认为你应该有这个。

if (_selectedItems == null) 
{ 
    _selectedItems = new ObservableCollection<string>(); 
} 
return _selectedItems; 

在您的版本中,_selectedItems永远不会被初始化。

在Xaml代码中,当您设置ItemSource时,您编写了Seleceteditems而不是SelectedItems此错误在编译时不会导致错误,但您的listBox没有将其itemSource设置为正确的元素。

然后,你没有在

ItemsSource="{Binding Path=ModelItem.Selecteditems, Mode=TwoWay}

这意味着源指定源是在默认情况下,你的对象的DataContext和DataContext的应该有一个公共的对象进行初始化名为ModelItem的财产,而该财产又有一个名为Selecteditems的公共财产。 希望它有效。

这是一个小例子。 在我的XAML文件

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <ListBox Height="287" HorizontalAlignment="Left" Margin="12,12,0,0" x:Name="LstSelectedPosts" VerticalAlignment="Top" Width="294" 
      ItemsSource="{Binding Path=SelectedItems, Mode=TwoWay}"/> 
    <Button Content="Add Item" HorizontalAlignment="Stretch" Click="Button_Click" Margin="321,110,68,170"/> 
    <Button Content="Remove Item" HorizontalAlignment="Stretch" Click="DelButton_Click" Margin="321,147,68,129"/> 
</Grid> 

在我xaml.cs文件

public partial class MainWindow : Window 
{ 

    private CDataContext _myCDataContext; 

    public MainWindow() 
    { 
     InitializeComponent(); 
     _myCDataContext = new CDataContext(); 
     DataContext = _myCDataContext; 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     _myCDataContext.Add(); 
    } 

    private void DelButton_Click(object sender, RoutedEventArgs e) 
    { 
     _myCDataContext.Remove(LstSelectedPosts.SelectedItem.ToString()); 
    } 


} 

和我CDataContext类

class CDataContext 
{ 
    private int _count = 0; 
    private ObservableCollection<string> _selectedItems; 
    public ObservableCollection<string> SelectedItems 
    { 
     get 
     { 
      if (_selectedItems == null) 
      { 
       _selectedItems = new ObservableCollection<string>(); 

      } 
      return _selectedItems; 
     } 
     set 
     { 
      _selectedItems = value; 
     } 
    } 

    public void Remove(string s) 
    { 
     SelectedItems.Remove(s); 
    } 

    public void Add() 
    { 
     SelectedItems.Add(_count.ToString()); 
     _count++; 
    } 
}