2011-08-16 13 views
1

사용자 지정 목록 상자에서 볼 수있는 ObservableCollection이 있습니다. 나는ObservableCollection이 목록보기를 업데이트하지 않습니다.

<ListBox x:Name="listBox1" > 
    <ListBox.ItemTemplate > 
     <DataTemplate > 
      <StackPanel Width="400" Margin="20" > 
       <Button x:Name="pic" Tag="{Binding Id}"> 
        <Button.Template> 
         <ControlTemplate> 
          <TextBlock Text="{Binding title}" TextWrapping="Wrap" FontFamily="Arial" FontSize="28" Tag="{Binding Id}"/> 
         </ControlTemplate> 
        </Button.Template> 
       </Button> 
       <TextBlock Text="{Binding pudate}" TextWrapping="Wrap" FontSize="24"/> 
       <Image Source="{Binding source_icon}" Width="100" Height="60"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

public class lbl 
{ 
    public ObservableCollection<feed> ModifiedItems 
     = new ObservableCollection<feed>(); 

    public lbl() 
    { 
     InitializeComponent(); 
     listBox1.ItemsSource = ModifiedItems ; 
    } 

    public void update(object sender, EventArgs e) 
    { 
     var x = ModifiedItems.Last(); 
     listBox1.Items.Add(x); 
    } 
} 

public class feed 
{ 
    public int ID { get; set; } 
    public int source_id { get; set; } 
    public string title { get; set; } 
    public string source_icon { get; set; } 
    public string url { get; set; } 
    public string pudate { get; set; } 
} 

아래 XAML 사용할 수있는 코드의

부품을 새 피드를 삽입하거나 ObservableCollection에에서 피드를 제거 같이 적용 변경에 따라보기를 업데이트 할 목록 상자가 필요합니다 : 이것은 코드의 일부가 아닙니다. "읽기 전용 컬렉션에서 지원되지 않는 작업"항목을 추가하려고하면 오류가 발생합니다.

여기에 게시 된 솔루션을 시도한 Implementing CollectionChanged과 여전히 같은 오류가 발생합니다.

어떤 도움 사전

답변

0

감사 당신이 그것에 ModifiedItems 수집을 결합하고,리스트 박스의 ItemsSource을 설정하는하시기 바랍니다입니다.

즉, ModifiedItems을 수정해야하며 ListBox이 아니라 항목을 추가/제거해야합니다. 그러면 그에 따라 업데이트됩니다.

public void update(object sender, EventArgs e) 
{ 
    var x = ModifiedItems.Last(); 
    ModifiedItems.Items.Add(x); 
} 

왜 마지막 항목을 복제할까요? 그러나 그것이 당신이해야 할 변화입니다.

5

문제는 업데이트 방법입니다 :

public void update(object sender, EventArgs e) 
{ 
    var x = ModifiedItems.Last(); 
    listBox1.Items.Add(x); 
} 

은 당신의 ListBoxItemsSourceObservableCollectionModifiedItems로 설정됩니다. 따라서이 컬렉션에서 항목을 추가하거나 제거하면 ListBox UI가 자동으로 업데이트됩니다. 예를 들어, 단순히 다음을 수행보기에 새 항목을 추가합니다 :

이는 ObservableCollection의 요점이다
ModifiedItems.Add(new feed()); 

, 뷰를 관찰 할 수있다!

항목을 추가/제거하지 않고 기존 항목을 업데이트하는 경우 feedINotifyPropertyChanged으로 구현해야합니다.

관련 문제