2009-11-02 4 views
0

나는 왜 이것이 작동하지 않는지 알아낼 수 없다. 나는 다음과 같습니다 XAML의 단순화 된 부분이있어 내에서 MainPage.xaml에 대한 코드 숨김에서Silverlight의 ObservableCollection에 ItemsContol.ItemsSource를 선언적으로 바인딩 할 수 있습니까?

<UserControl x:Class="Foo.MainPage" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"> 
    <Grid x:Name="LayoutRoot"> 
     <ScrollViewer VerticalAlignment="Stretch" 
         Background="Black" 
         HorizontalScrollBarVisibility="Auto" 
         VerticalScrollBarVisibility="Auto" > 
      <ItemsControl x:Name="PictureItemsControl" 
          ItemsSource="{Binding Pics}"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Horizontal" 
            VerticalAlignment="Center" 
            HorizontalAlignment="Center" /> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <Image Source="{Binding Location}" 
            Height="200" 
            Width="200" 
            Stretch="UniformToFill" /> 
          <TextBlock FontFamily="Verdana" 
             FontSize="16" 
             Foreground="White" 
             Text="{Binding Name}" /> 
         </StackPanel> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </ScrollViewer> 
    </Grid> 
</UserControl> 

을,이 있습니다

namespace Foo 
{ 
    public partial class MainPage : UserControl 
    { 
     public FooViewModel viewModel; 

     public MainPage() 
     { 
      InitializeComponent(); 
      viewModel = new FooViewModel(); 
      this.DataContext = viewModel; 
     } 

    } 
} 

을 그리고 내 뷰 모델은 다음과 같습니다

namespace Foo 
{ 
    public class FooViewModel:INotifyPropertyChanged 
    { 
     public ObservableCollection<Pic> Pics; 
     public FooViewModel() 
     { 
      Pics = new ObservableCollection<Pic>(); 
      Pic.GetPics(Pics); 
     } 

     //More code here... 
    } 
} 

그리고 Pic는 일부 공용 속성과 관찰 가능한 컬렉션을 테스트 데이터로 채우는 정적 메서드가있는 단순한 클래스입니다. 문제는 내가 어떤 내 MainPage 생성자에이 줄을 추가하지 않는 한 내 ItemsControl을에서 발생하는 바인딩 보이지 않아요 것입니다 :

PictureItemsControl.ItemsSource = viewModel.Pics; 

내가 그 바인딩 작업을 수행합니다. 그러나 이것은 나에게 맞는 것 같지 않습니다. 선언적 바인딩에서 뭔가를 놓치고 있습니까?

답변

3

필드가 아닌 속성으로 "사진"을 변경해야합니다. 필드에 직접 데이터 바인딩 할 수는 없습니다. 찍은 사진을

public ObservableCollection<Pic> Pics { get; private set; } 

ViewModel 및 Pics에 간접적으로 바인딩하기 때문에 작동하는 경우가 작동합니다.

+0

고마워! 나는 그것이 쉬운 일이되어야한다고 생각하고 나는 문서에서 그것을 간과해야만한다. – Raumornie

0

예, ItemControl (ListBox, TabControl, ComboBox)에서 ItemsSource를 지정하여 데이터를 바인딩 할 수 있어야합니다.

+0

귀하의 답변을 이해할 수 없습니다. 코드에서 ItemsSource에 바인딩 할 수 있지만 Xaml의 평행선이 작동하지 않는 것 같습니다. 내가 xaml에 포함시키지 않는 것에 대해 더 구체적으로 설명 할 수 있습니까? – Raumornie

관련 문제