0

描述:

我有一些视图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"));
        }
    }
}

先感谢您!

4

1 回答 1

0

您可以向视图添加新的依赖属性,将视图模型绑定到此属性,然后将此属性用作 StackPanel 和 ComboBox 的 DataContext。例如(“this”是您的视图的名称,“AdditionalContext”是您声明用于存储您的视图模型的依赖属性):

<StackPanel DataContext="{Binding AdditionalContext, ElementName=this}" Visibility="{Binding Path=SelectedVisibility, Converter={StaticResource SelectedValueToVisible}}"/>

但是你不应该这样做,因为它违反了 MVVM 模式。viewmodel 的全部观点是您将其用作视图的 DataContext。解决您的问题的正确方法是将列表声明移至您的视图模型。

于 2013-03-07T06:53:35.483 回答