说明
我有一些视图,其DataContext
已设置为某个列表。
我还有一个ComboBox
,它应该触发StackPanel
的可见性事件。它是通过实现INotifyPropertyChanged
。
问题:
属性“SelectedVisibility”不是DataContext
的一部分,而是ViewModel
类的一部分,我找不到任何方法来明确地绑定我的ViewModel以达到该属性。
问题:
你知道我如何能明确地将我的VM定义为我的ComboBox中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"));
}
}
}
提前谢谢!
答案 0 :(得分:0)
您可以向视图添加新的依赖属性,将视图模型绑定到此属性,然后将此属性用作StackPanel和ComboBox的DataContext。例如(“this”是视图的名称,“AdditionalContext”是您声明用于存储viewmodel的依赖属性):
<StackPanel DataContext="{Binding AdditionalContext, ElementName=this}" Visibility="{Binding Path=SelectedVisibility, Converter={StaticResource SelectedValueToVisible}}"/>
但是你不应该这样做,因为它违反了MVVM模式。整个视点模型是您将它用作视图的DataContext。解决问题的正确方法是将List声明移动到您的viewmodel。