2014-10-03 44 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標記擴展這個確切的情況下 - 這將確保只有一個視圖模型的實例被創建和使用這兩個窗口