有一个视图模型。
public class VM_searchResult : DependencyObject, INotifyPropertyChanged
{
private CCard createdCard;
private Commands selectSpravInfo;
public Commands SelectSpravInfo
{
get
{
return selectSpravInfo ?? (selectSpravInfo = new Commands(obj =>
{
W_selectSprav wSelectSprav = new W_selectSprav(obj as CCard);
wSelectSprav.ShowDialog();
}));
}
}
public CCard CreatedCard
{
get { return createdCard; }
set
{
createdCard = value;
OnPropertyChanged("CreatedCard");
}
}
}
看法
<StackPanel Orientation="Horizontal" DataContext="{Binding CreatedCard}">
<TextBlock Text="Номер регистрации:" Margin="10,7,0,0" TextWrapping="Wrap" VerticalAlignment="Top"/>
<TextBox x:Name="TB_regnum" Text="{Binding Regnum}" Margin="10,7,0,0" VerticalAlignment="Top" MinWidth="90"/>
<TextBlock Text="База данных:" Margin="10,7,0,0" TextWrapping="Wrap" VerticalAlignment="Top"/>
<Button x:Name="B_selectDB_card" Command="{Binding SelectSpravInfo}" CommandParameter="{Binding CreatedCard}" Content="..." Margin="10,7,0,0" VerticalAlignment="Top" Width="20"/>
<TextBox x:Name="TB_db_card" Text="{Binding Bdncpi._name}" Margin="10,7,15,0" TextWrapping="Wrap" VerticalAlignment="Top" IsEnabled="False" MinWidth="200"/>
</StackPanel>
在这种情况下,会在实际不存在SelectSpravInfo
的上下文中查找该命令。CreatedCard
因此问题是,如何摆脱这种情况?以某种方式为每个文本框规定一个上下文是不好的。
VM_searchResult
我们为其数据上下文(您要绑定的命令所在的位置)的元素命名。接下来,通过绑定所需的属性ElementName
解决方案。为视图命名
x:Name="root"
,然后将其用作DataContext="{Binding ElementName=root}" Command="{Binding Path=DataContext.SelectSpravInfo}"