2014-10-03 59 views
1

我从主窗口显示了一个新窗口。我需要将一些来自Main.cs的数据绑定到Upload.xaml中的ListBox。从父窗口绑定数据

最好的方法来做到这一点?目前看起来我没有访问这个对象,因为它不起作用。

我怎么打开的窗口: Main.xaml.cs:

private void upload_Click(object sender, RoutedEventArgs e) 
     { 
      //Show the upload form 
      Upload uploadForm = new Upload(); 
      Functions.ShowDimmer(uploadForm); 

      //Manage result 

     } 

的ShowDimmer方法只是显示在辩论的方式,它只是创造一个背后的半透明形式变暗后面的形式和在新的顶端。

这里是我上传的XAML

<ListBox Width="542" Height="100" Grid.Column="1" ItemsSource="{Binding Logged, UpdateSourceTrigger=PropertyChanged}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <DockPanel Style="{StaticResource Users}"> 
         <DockPanel.Background> 
          <ImageBrush ImageSource="{Binding ThumbLoc}" /> 
         </DockPanel.Background> 
         <Label> 
          <Label.Content> 
           <TextBlock> 
            <TextBlock.Text> 
             <MultiBinding StringFormat="{}{0} {1}"> 
              <Binding Path="FirstName" /> 
              <Binding Path="LastName" /> 
             </MultiBinding> 
            </TextBlock.Text> 
           </TextBlock> 
          </Label.Content> 
         </Label> 
        </DockPanel> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ListBox> 

这是List对象我想要在Main.xaml.cs结合

//Public list of users and form can access 
     ObservableCollection<User> LoggedUsers = new ObservableCollection<User>(); 
     public ObservableCollection<User> Logged 
     { 
      get 
      { 
       return LoggedUsers; 
      } 
     } 

我一直在使用的DataContext我上传的窗口尝试,但我不知道如何访问它:

public partial class Upload : Window 
    { 
     public Upload() 
     { 
      InitializeComponent(); 
      DataContext = Main.LoggedUsers; 
     } 
    } 

回答

1

您正在使用一个不好的做法。但现在,试试这个:

public partial class Upload : Window { 
    public Upload(YourMainWindowClassName main){ 
     InitializeComponent(); 
     DataContext = main.LoggedUsers; // or whatever your property name is 
    } 
} 

,并称之为:

Upload uploadForm = new Upload(this); 
+0

什么是不好的做法? – 2014-10-03 17:03:30

+1

请参阅安德烈斯克的更好实践的答案。你应该知道优秀的设计模式等。 – 2014-10-03 17:43:49

+0

@MartynBall接受答案,如果它的工作。否则,让我知道发生了什么后,使用代码 – 2014-10-03 18:01:11

1

我建议你定义LoggedUsers(你要绑定到所有其他属性)在一个单独的视图模型类。然后,你可以:

  • 地将这个视图模型作为第一窗口的DataContext,它传递给第二个窗口,并设置为DataContext还有
  • 或引用在App.xaml的资源视图模型类,并设置这两个窗口DataContext通过使用StaticResource标记扩展这个确切的情况下 - 这将确保只有一个视图模型的实例被创建和使用这两个窗口