正在从父窗口绑定数据
本文关键字:绑定 数据 窗口 | 更新日期: 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的一个实例