C# WPF:如何访问嵌套usercontrol中的observablecollection?
在我的应用程序中,我使用了两个usercontrol:UserControl1是主要的一个,在它里面,我使用了UserControl2六次 UserControl2有几个组合框,我想从最后一个应用程序动态填充它们。首先,我尝试将数据绑定到其中一个 UserControl2中的组合框如下所示: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="
<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);
}
}