Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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# WPF:如何访问嵌套usercontrol中的observablecollection?_C#_Wpf_User Controls_Observablecollection - Fatal编程技术网

C# WPF:如何访问嵌套usercontrol中的observablecollection?

C# WPF:如何访问嵌套usercontrol中的observablecollection?,c#,wpf,user-controls,observablecollection,C#,Wpf,User Controls,Observablecollection,在我的应用程序中,我使用了两个usercontrol:UserControl1是主要的一个,在它里面,我使用了UserControl2六次 UserControl2有几个组合框,我想从最后一个应用程序动态填充它们。首先,我尝试将数据绑定到其中一个 UserControl2中的组合框如下所示: <ComboBox x:Name="VidTransform" Template="{DynamicResource BaseComboBoxStyle}" ItemContainerStyle="

在我的应用程序中,我使用了两个usercontrol:UserControl1是主要的一个,在它里面,我使用了UserControl2六次

UserControl2有几个组合框,我想从最后一个应用程序动态填充它们。首先,我尝试将数据绑定到其中一个

UserControl2中的组合框如下所示:

 <ComboBox x:Name="VidTransform" Template="{DynamicResource BaseComboBoxStyle}" ItemContainerStyle="{DynamicResource BaseComboBoxItemStyle}" Grid.Row="1" ItemsSource="{Binding Path=DataContext.VidTransformsNames,ElementName=Ch_Parameters, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" SelectedValue="{Binding Path=SelectedTransform,ElementName=Ch_Parameters, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>

目前,我只能使用此ObservableCollection手动填充它(所有字符串都正确显示):

private observateCollection\u VidTransformsNames=新的observateCollection(新[]{“test0”、“test1”、“test2”、“test3”、“test4”、“test5”});
公共可观测采集系统
{
获取{return}
设置{u VidTransformsNames=value;}
}
在UserControl1(包含UserControl2)中,我尝试创建另一个ObservableCollection,并在运行时在最终应用程序中动态填充它

这是:

    private ObservableCollection<string> _VideoTransformsNames = new ObservableCollection<string>(new[] { "Test0", "Test1", "Test2", "Test3", "Test4", "Test5" });
    public ObservableCollection<string> VideoTransformsNames
    {
        get { return _VideoTransformsNames; }
        set { _VideoTransformsNames = value; }
    }
private observateCollection\u VideoTransformsNames=新的observateCollection(新[]{“Test0”、“Test1”、“Test2”、“Test3”、“Test4”、“Test5”});
公共可观测收集视频转换系统
{
获取{return}
设置{u VideoTransformsNames=value;}
}
然后绑定:

<local:UserControl1 VidTransformsNames="{Binding Path=VideoTransformsNames, ElementName=cmix, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

我是初学者,但在这里我肯定错了,因为我得到了这个错误:

无法在“UserControl1”类型的“VidTransformsNames”属性上设置“Binding”。只能对DependencyObject的DependencyProperty设置“绑定”


如果UserControl2嵌套在UserControl1中,我如何在运行时访问和填充UserControl2的observablecollection?

这是因为您的属性需要正确声明为
DependencyProperty

依赖项属性和WPF属性系统扩展属性 通过提供支持属性的类型(如 标准支持模式的替代实现 具有私有字段的属性。此类型的名称为 从属财产。定义WPF的另一个重要类型 属性系统是DependencyObject。DependencyObject定义了基对象 类,该类可以注册并拥有依赖项属性

请遵循此操作,或依赖项属性概述

上述文章中的示例:

public static readonly DependencyProperty IsSpinningProperty = 
    DependencyProperty.Register(
    "IsSpinning", typeof(Boolean),


...


    );
public bool IsSpinning
{
    get { return (bool)GetValue(IsSpinningProperty); }
    set { SetValue(IsSpinningProperty, value); }
}
让我们尝试将其设置为您的代码:

public static readonly DependencyProperty VideoTransformsNamesProperty = 
DependencyProperty.Register("VideoTransformsNames", typeof(ObservableCollection<string>), typeof(UserControl1));

public string VideoTransformsNames
{
    get
    {
        return this.GetValue(VideoTransformsNamesProperty) as ObservableCollection<string>;
    }
    set
    {
        this.SetValue(VideoTransformsNamesProperty, value);
    }
}
公共静态只读从属属性VideoTransformsNameProperty=
DependencyProperty.Register(“VideoTransformsNames”、typeof(ObservableCollection)、typeof(UserControl1));
公共字符串视频编码
{
得到
{
将此.GetValue(VideoTransformsNameProperty)作为ObservableCollection返回;
}
设置
{
this.SetValue(VideoTransformsNameProperty,value);
}
}

你到底在说什么财产?我应该使用DependencyProperty而不是ObservableCollection吗?您必须创建
公共静态只读DependencyProperty YourName
,然后正确注册它。在register部分,您必须在您的case中添加
typeof(observetecollection)
事实上,这已经开始工作了。我不知道可观性收集可能是一种依赖性财产。谢谢你的帮助。我很高兴能帮上忙。请把我的答案记为正确。
public static readonly DependencyProperty VideoTransformsNamesProperty = 
DependencyProperty.Register("VideoTransformsNames", typeof(ObservableCollection<string>), typeof(UserControl1));

public string VideoTransformsNames
{
    get
    {
        return this.GetValue(VideoTransformsNamesProperty) as ObservableCollection<string>;
    }
    set
    {
        this.SetValue(VideoTransformsNamesProperty, value);
    }
}