Хорошо, в вашем коде есть ошибки, которые могут вызвать проблему.
В геттере, я думаю, у тебя должно быть это.
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++;
}
}