Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不使用当前DataContext显式绑定到对象_C#_Wpf_Data Binding_Datacontext - Fatal编程技术网

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

C# 不使用当前DataContext显式绑定到对象,c#,wpf,data-binding,datacontext,C#,Wpf,Data Binding,Datacontext,说明: 我有一些视图,其DataContext已设置为某个列表 我还有一个组合框,它应该会触发一个堆栈面板的可见性事件。这是通过一个属性“SelectedVisibility”完成的,该属性正在实现一个INotifyPropertyChanged 问题: 属性“SelectedVisibility”不是DataContext的一部分,而是在ViewModel类中,我找不到任何方法来明确绑定我的ViewModel以访问该属性 问题: 您知道我如何将VM明确定义为组合框中SelectedValue绑

说明:

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

我还有一个
组合框
,它应该会触发一个
堆栈面板
的可见性事件。这是通过一个属性“SelectedVisibility”完成的,该属性正在实现一个
INotifyPropertyChanged

问题:

属性“SelectedVisibility”不是
DataContext
的一部分,而是在
ViewModel
类中,我找不到任何方法来明确绑定我的ViewModel以访问该属性

问题:

您知道我如何将VM明确定义为组合框中SelectedValue绑定的DataContext吗

代码详细信息:

查看XAML:

<ComboBox ItemsSource="{Binding Source={StaticResource VisibilityEnum}}" SelectedValue="{Binding Path=SelectedVisibility}"/>

<StackPanel Visibility="{Binding Path=SelectedVisibility,Converter={StaticResource SelectedValueToVisible}}">
视图模型:

public event PropertyChangedEventHandler PropertyChanged;

public string SelectedVisibility
{
    get 
    {
        return _selectedVisibility; 
    }
    set
    {
        _selectedVisibility= value;
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs("SelectedVisibility"));
        }
    }
}

提前谢谢你

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



但是,您不应该这样做,因为这违反了MVVM模式。viewmodel的整个要点是将其用作视图的DataContext。解决问题的正确方法是将列表声明移动到viewmodel。

谢谢!很抱歉,我的回答迟了。这就是我一直在寻找的。我做这个设计是因为我想在代码的其他地方使用我的嵌入式用户控件(V&VM),但我认为你是对的,所以我已经简化为只有:2个嵌入式用户控件(仅V)和1个主视图(V&VM)。干杯
public event PropertyChangedEventHandler PropertyChanged;

public string SelectedVisibility
{
    get 
    {
        return _selectedVisibility; 
    }
    set
    {
        _selectedVisibility= value;
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs("SelectedVisibility"));
        }
    }
}
<StackPanel DataContext="{Binding AdditionalContext, ElementName=this}" Visibility="{Binding Path=SelectedVisibility, Converter={StaticResource SelectedValueToVisible}}"/>