2010-04-18 64 views
0

我有這個問題,當我嘗試與列表框/視圖 同步顯示第一個項目X次(x列表中的記錄總量) 但它不' T改變變量的WPF列表框/查看數據綁定奇怪的結果

這裏是XAML

<ListBox x:Name="PostListView" BorderThickness="0" 
        MinHeight="300" 
        Background="{x:Null}" 
        BorderBrush="{x:Null}" 
        Foreground="{x:Null}" 
        VerticalContentAlignment="Top" 
        ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
        ScrollViewer.VerticalScrollBarVisibility="Disabled" 
       DataContext="{Binding Source={StaticResource PostListData}}" 
        ItemsSource="{Binding Mode=OneWay}" 
        IsSynchronizedWithCurrentItem="True" 
        MinWidth="332" SelectedIndex="0" SelectionMode="Extended" AlternationCount="1"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <DockPanel x:Name="SinglePost" VerticalAlignment="Top" ScrollViewer.CanContentScroll="True" ClipToBounds="True" Width="333" Height="70" d:LayoutOverrides="VerticalAlignment" d:IsEffectDisabled="True"> 
      <DockPanel.DataContext> 
       <local:PostList/> 
      </DockPanel.DataContext> 
      <StackPanel x:Name="AvatarNickHolder" Width="60"> 
          <Label x:Name="Nick" HorizontalAlignment="Center" Margin="5,0" VerticalAlignment="Top" Height="15" Content="{Binding Path=pUsername, FallbackValue=pUsername}" FontFamily="Arial" FontSize="10.667" Padding="5,0"/> 
       <Image x:Name="Avatar" HorizontalAlignment="Center" Margin="5,0,5,5" VerticalAlignment="Top" Width="50" Height="50" IsHitTestVisible="False" Source="1045443356IMG_0972.jpg" Stretch="UniformToFill"/> 
      </StackPanel> 
         <TextBlock x:Name="userPostText" Margin="0,0,5,0" VerticalAlignment="Center" FontSize="10.667" Text="{Binding Path=pMsg, FallbackValue=pMsg}" TextWrapping="Wrap"/> 
     </DockPanel> 
    </DataTemplate> 
      </ListBox.ItemTemplate> 
    </ListBox> 

這裏是ovservable列表類

public class PostList : ObservableCollection<PostData> 
    { 
     public PostList() 
      : base() 
     { 
      Add(new PostData("this is test msg", "Cather", "1045443356IMG_0972.jpg")); 
      Add(new PostData("this is test msg1", "t1", "1045443356IMG_0972.jpg")); 
      Add(new PostData("this is test msg2", "t2", "1045443356IMG_0972.jpg")); 
      Add(new PostData("this is test msg3", "t3", "1045443356IMG_0972.jpg")); 
      Add(new PostData("this is test msg4", "t4", "1045443356IMG_0972.jpg")); 
      Add(new PostData("this is test msg5", "t5", "1045443356IMG_0972.jpg")); 
      // Add(new PostData("Isak", "Dinesen")); 
      // Add(new PostData("Victor", "Hugo")); 
      // Add(new PostData("Jules", "Verne")); 
     } 
    } 

    public class PostData 
    { 
     private string Username; 
     private string Msg; 
     private string Avatar; 
     private string LinkAttached; 
     private string PicAttached; 
     private string VideoAttached; 

     public PostData(string msg ,string username, string avatar=null, string link=null,string pic=null ,string video=null) 
     { 
      this.Username = username; 
      this.Msg = msg; 
      this.Avatar = avatar; 
      this.LinkAttached = link; 
      this.PicAttached = pic; 
      this.VideoAttached = video; 
     } 

     public string pMsg 
     { 
      get { return Msg; } 
      set { Msg = value; } 
     } 

     public string pUsername 
     { 
      get { return Username; } 
      set { Username = value; } 
     } 

     public string pAvatar 
     { 
      get { return Avatar; } 
      set { Avatar = value; } 
     } 

     public string pLink 
     { 
      get { return LinkAttached; } 
      set { LinkAttached = value; } 
     } 

     public string pPic 
     { 
      get { return PicAttached; } 
      set { PicAttached = value; } 
     } 

     public string pVideo 
     { 
      get { return VideoAttached; } 
      set { VideoAttached = value; } 
     } 
    } 

任何ID eas?

回答

1

您每次創建模板時都會創建一個新的DataContext(PostList)。

在列表框中,將ItemsSource設置爲新的PostList。

ListBox將爲PostData的每個實例分配DataTemplate的每個副本,並將其設置爲根元素的DataContext。

TL;博士:擺脫

<DockPanel.DataContext> 
    <local:PostList/> 
</DockPanel.DataContext> 
+0

偉大的答案,謝謝! – Aviatrix 2010-04-18 14:57:18

+0

現在它不同步,我動態地添加一個項目,它不會出現:(我是新手:( – Aviatrix 2010-04-18 16:39:12

+1

@avia你可能將項目添加到你認爲是該控件綁定的PostList反對,但實際上不是同一個實例,我肯定會建議你創建一個非常簡單的項目,它將單個ListBox綁定到單個ObservableCollection,以便了解所有內容如何協同工作。 – Will 2010-04-18 23:06:10