从父窗口绑定数据

时间:2014-10-03 16:01:32

标签: c# wpf xaml

我在主窗口中显示了一个新窗口。我需要将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>

这是我尝试在Main.xaml.cs中绑定的List对象

//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;
        }
    }

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

我建议您在单独的Viewmodel类中定义LoggedUsers(以及要绑定到的所有其他属性)。然后你可以:

  • 将此Viewmodel设置为第一个窗口DataContext,将其传递给第二个窗口并将其设置为DataContext
  • 或引用App.xaml资源中的Viewmodel类,并设置两个窗口&#39;通过使用DataContext标记扩展名来StaticResource到这个确切的实例 - 这将确保两个窗口只创建和使用Viewmodel的一个实例