2016-12-23 4 views
0

Я пытаюсь связать наблюдаемую коллекцию строк. Но когда я запускаю приложение, я получаю исключение, что коллекция Items должна быть пуста перед использованием ItemsSource. У меня нет элементов в коллекции, когда они являются обязательными, так что может быть проблемой?«Коллекция предметов должна быть пустой перед использованием ItemsSource.» Error wpf

Мои Xaml

<ListBox ItemsSource="{Binding Users}" Margin="10,77,805,228" Grid.RowSpan="2"> 
        <ListBoxItem> 
         <DataTemplate> 
          <StackPanel Orientation="Horizontal"> 

          </StackPanel> 
         </DataTemplate> 
        </ListBoxItem> 
       </ListBox> 
<Button x:Name="AddUserButton" Content="Додати" Command="{Binding AddUserCommand}" RenderTransformOrigin="0.512,1.9" /> 

Мои ViewModel (команда и ObservableCollection)

public class UsersTabViewModel : ViewModelBase 
{ 
    private ObservableCollection<string> users; 
    private string text; 

    private ICommand addUserCommand; 

    private bool _canExecute; 

    public UsersTabViewModel() 
    { 
     _canExecute = true; 
     Users = new ObservableCollection<string>(); 
    } 

    public ObservableCollection<string> Users { get; set; } 


    public ICommand AddUserCommand 
    { 
     get 
     { 
      return addUserCommand ?? (addUserCommand = new CommandHandler(() => AddUserAction(), _canExecute)); 
     } 

    } 

    public string Text 
    { 
     get 
     { 
      return text; 
     } 

     set 
     { 
      text = value; 
     } 
    } 

    //text is bound to here 
    private void AddUserAction() 
    { 

     Users.Add("collection"); 


    } 

    public class CommandHandler : ICommand 
    { 
     private Action _action; 
     private bool _canExecute; 
     public CommandHandler(Action action, bool canExecute) 
     { 
      _action = action; 
      _canExecute = canExecute; 
     } 

     public bool CanExecute(object parameter) 
     { 
      return _canExecute; 
     } 

     public event EventHandler CanExecuteChanged; 

     public void Execute(object parameter) 
     { 
      _action(); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

ответ

1

Поскольку ошибка пытается сказать вам, вы не можете иметь какие-либо предметы, если вы используете ItemsSource, чтобы связать их вместо.
Удалить <ListBoxItem>.

Чтобы задать шаблон для связанных предметов, установите <ListBox.ItemTemplate>.

+0

Обратите внимание, что вы можете использовать 'CompositeCollection', чтобы получить лучшее из обоих миров (в основном). – BradleyDotNET

0

Я установил его расчистке мой ListBox с Items.Clear()