不使用当前DataContext显式绑定到对象

时间:2013-03-07 05:22:17

标签: c# wpf data-binding datacontext

说明

我有一些视图,其DataContext已设置为某个列表。

我还有一个ComboBox,它应该触发StackPanel的可见性事件。它是通过实现INotifyPropertyChanged

的属性“SelectedVisibility”完成的

问题:

属性“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"));
        }
    }
}

提前谢谢!

1 个答案:

答案 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。