在不使用当前DataContext的情况下显式绑定到对象
本文关键字:情况下 绑定 对象 DataContext | 更新日期: 2023-09-27 18:02:35
描述:
我有一些视图,其DataContext
已设置为某个列表。
我还有一个ComboBox
,它应该触发StackPanel
的Visibility事件。它是通过实现INotifyPropertyChanged
的属性"SelectedVisibility"来完成的。
问题:
属性"SelectedVisibility"不是DataContext
的一部分,而是在ViewModel
类中,我找不到任何方法来显式绑定我的ViewModel以访问该属性。
问题:
你知道我如何在ComboBox中将VM明确定义为SelectedValue绑定的DataContext吗
代码详细信息:
查看XAML:
<ComboBox ItemsSource="{Binding Source={StaticResource VisibilityEnum}}" SelectedValue="{Binding Path=SelectedVisibility}"/>
<StackPanel Visibility="{Binding Path=SelectedVisibility,Converter={StaticResource SelectedValueToVisible}}">
查看代码背后:
public Counterparties_UserInputs()
{
// Cannot bind this as already bound
// this.DataContext = _VM;
InitializeComponent();
}
视图模型:
public event PropertyChangedEventHandler PropertyChanged;
public string SelectedVisibility
{
get
{
return _selectedVisibility;
}
set
{
_selectedVisibility= value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("SelectedVisibility"));
}
}
}
提前谢谢!
您可以向视图添加一个新的dependency属性,将视图模型绑定到此属性,然后将此属性用作StackPanel和ComboBox的DataContext。例如("this"是视图的名称,"AdditionalContext"是您为存储视图模型而声明的依赖性属性(:
<StackPanel DataContext="{Binding AdditionalContext, ElementName=this}" Visibility="{Binding Path=SelectedVisibility, Converter={StaticResource SelectedValueToVisible}}"/>
但是,您不应该这样做,因为这违反了MVVM模式。视图模型的全部意义在于,您将其用作视图的DataContext。解决问题的正确方法是将List声明移动到视图模型中。