正在从父窗口绑定数据

本文关键字:绑定 数据 窗口 | 更新日期: 2023-09-27 18:25:31

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

正在从父窗口绑定数据

您使用的是一种糟糕的做法。但现在,试试这个:

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

并称之为

Upload uploadForm = new Upload(this);

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

  • 将该Viewmodel设置为第一个窗口的DataContext,将其传递给第二个窗口,并在那里设置为DataContext
  • 或者引用App.xaml的资源中的Viewmodel类,并通过使用StaticResource标记扩展将两个窗口的DataContext设置为该实例-这将确保两个窗口只创建和使用Viewmodel的一个实例