【发布时间】:2018-09-27 20:56:29
【问题描述】:
我有一个父用户控件,其中包含另一个名为TrainDetailsControl 的控件。父用户控件的数据上下文设置为 ViewModel 类(见下文)。
<UserControl>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ListBox ItemsSource="{Binding Trains}"
SelectedItem="{Binding SelectedTrain}"
DisplayMemberPath="Name"/>
<local:TrainDetailsControl Grid.Column="1" DataContext="{Binding SelectedTrain}"/>
</Grid>
</UserControl>
我所做的是将列表框中选定的火车“传递”到TrainDetailsControls。在该用户控件中,我显示了所选火车对象的详细信息。
<UserControl>
<StackPanel>
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding Details}"/>
</StackPanel>
</UserControl>
这是带有共享变量的 ViewModel(这不是完整的代码,只是给你一个想法)。
public class TrainViewModel : ViewModelBase
{
public ObservableCollection<Train> Trains { get; }
= new ObservableCollection<Train>();
private Train selectedTrain;
public Train SelectedTrain
{
get { return selectedTrain; }
set { SetValue(ref selectedTrain, value); }
}
}
这很好用,因为当我从列表框中选择一个火车项目时,它的详细信息会正确显示在另一个用户控件中。但我想知道是否可以从TrainDetailsControl 的代码隐藏中访问名称和详细信息变量。最后一个用户控件的数据上下文是否与其父用户控件(即视图模型类)的数据上下文相同?
【问题讨论】:
-
不,DataContext 是 SelectedTrain 属性返回的任何内容。
-
@mm8 我可以从代码隐藏(我的意思是,从子用户控件)访问它吗?
-
请看我的回答。
标签: c# wpf xaml data-binding datacontext