C# 如何将用户控件属性绑定到可观察集合中包含的可观察对象的属性
我使用的是MVVMLight,需要能够在视图初始化期间对大约12个切换框的属性进行编程编辑。因为它们太多了,我想遍历链接的属性,所以我尝试使用C# 如何将用户控件属性绑定到可观察集合中包含的可观察对象的属性,c#,wpf,mvvm,mvvm-light,observablecollection,C#,Wpf,Mvvm,Mvvm Light,Observablecollection,我使用的是MVVMLight,需要能够在视图初始化期间对大约12个切换框的属性进行编程编辑。因为它们太多了,我想遍历链接的属性,所以我尝试使用ObservableCollection的ObservableCollection,其中包含要绑定到切换按钮属性的值。我不确定这是绑定问题还是继承自observegeObject的INotifyPropertyChanged接口的不正确实现 下面是包含我希望绑定到的属性的类: public-class-CavitySelect:observateObjec
ObservableCollection
的ObservableCollection
,其中包含要绑定到切换按钮属性的值。我不确定这是绑定问题还是继承自observegeObject
的INotifyPropertyChanged
接口的不正确实现
下面是包含我希望绑定到的属性的类:
public-class-CavitySelect:observateObject
{
私有字符串_文本;
公共字符串文本
{
获取{return\u Text;}
设置
{
_文本=值;
RaisePropertyChanged(“文本”);
}
}
私人厕所可见;
公众视野
{
获取{return\u Visible;}
设置
{
_可见=价值;
RaisePropertyChanged(“可见”);
}
}
私有布尔开关;
公共布尔开关
{
获取{return\u Toggle;}
设置
{
_切换=值;
RaisePropertyChanged(“切换”);
}
}
公共腔选择()
{
Text=“”;
可见=假;
切换=假;
}
}
下面是myObservableCollection
的实例:
private observateCollection\u CavTogglesProperties;
公共可观察收集警告属性
{
获取{return\u CavTogglesProperties;}
设置
{
_CavTogglesProperties=值;
RaiseProperty已更改(“CavTogglesProperties”);
}
}
公共MyViewModel()
{
this.CavTogglesProperties=getCavests();
}
公共可观测集合getDecepts()
{
CavitySelectT11=新的CavitySelect();
CavitySelectT12=新的CavitySelect();
CavitySelectT13=新的CavitySelect();
CavitySelectT14=新的CavitySelect();
CavitySelectT15=新的CavitySelect();
CavitySelectT16=新的CavitySelect();
CavitySelectT26=新的CavitySelect();
CavitySelect t21=新的CavitySelect();
CavitySelect t22=新的CavitySelect();
CavitySelect t23=新的CavitySelect();
CavitySelectT24=新的CavitySelect();
CavitySelect t25=新的CavitySelect();
ObservableCollection temp=新的ObservableCollection(){t11,t12,t13,t14,t15,t16,t21,t22,t23,t24,t25,t26};
返回温度;
}
以下是我试图将其绑定的方式:
我已经确认视图与ViewModel类的绑定工作正常。我还尝试了绑定,但没有先设置包含网格的DataContext
,例如:
请澄清:
每个CavitySelect项都与GridView中的切换按钮相关,属性将根据未显示的输入进行初始化 显示项目集合
您的问题并没有说得很清楚,但我相信您希望在UI中显示一个项目列表;然而,正如当前实现的那样,XAML的结构实际上是显示单个项
要显示列表,您需要查看各种集合视图(例如,等等)
例如:
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVisibilty"/>
</Window.Resources>
<Grid Background="#FFF4F4F5" Margin="8,165,8,8">
<ListView ItemsSource="{Binding CavTogglesProperties}">
<ListView.ItemTemplate>
<DataTemplate>
<ToggleButton Content="{Binding Text}" IsChecked="{Binding Toggle}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
private ObservableCollection<CavitySelect> _CavTogglesProperties;
public ObservableCollection<CavitySelect> CavTogglesProperties
{
get { return _CavTogglesProperties; }
set
{
_CavTogglesProperties = value;
RaisePropertyChanged("CavTogglesProperties");
}
}
private CavitySelect _SpecificCavToggle;
public CavitySelect SpecificCavToggle
{
get { return _SpecificCavToggle; }
set
{
_SpecificCavToggle= value;
RaisePropertyChanged("SpecificCavToggle");
}
}
public MyViewModel()
{
this.CavTogglesProperties = GetCavities();
this.SpecificCavToggle = this.CavTogglesProperties[0];
}
public ObservableCollection<CavitySelect> GetCavities()
{
CavitySelect t11 = new CavitySelect();
CavitySelect t12 = new CavitySelect();
CavitySelect t13 = new CavitySelect();
CavitySelect t14 = new CavitySelect();
CavitySelect t15 = new CavitySelect();
CavitySelect t16 = new CavitySelect();
CavitySelect t26 = new CavitySelect();
CavitySelect t21 = new CavitySelect();
CavitySelect t22 = new CavitySelect();
CavitySelect t23 = new CavitySelect();
CavitySelect t24 = new CavitySelect();
CavitySelect t25 = new CavitySelect();
ObservableCollection<CavitySelect> temp = new ObservableCollection<CavitySelect>() {t11,t12,t13,t14,t15,t16,t21,t22,t23,t24,t25,t26};
return temp;
}
要仅显示特定项,应在ViewModel中过滤列表,而不是绑定可见性。如果显示时可见的项目没有更改,只需在填充列表时对其进行过滤即可
但是,如果可见性将发生更改,并且您希望视图反映这些更改,请查看为您的项目源实现筛选器,如本问题中所述:
因为您已经在使用ObservableCollection和ObservableObject,所以所有内容都应该自动更新
显示集合中的单个项目
如果我看错了你的问题,你想知道如何展示收藏中的单个项目,有几种不同的方法:
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVisibilty"/>
</Window.Resources>
<Grid Background="#FFF4F4F5" Margin="8,165,8,8">
<ListView ItemsSource="{Binding CavTogglesProperties}">
<ListView.ItemTemplate>
<DataTemplate>
<ToggleButton Content="{Binding Text}" IsChecked="{Binding Toggle}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
private ObservableCollection<CavitySelect> _CavTogglesProperties;
public ObservableCollection<CavitySelect> CavTogglesProperties
{
get { return _CavTogglesProperties; }
set
{
_CavTogglesProperties = value;
RaisePropertyChanged("CavTogglesProperties");
}
}
private CavitySelect _SpecificCavToggle;
public CavitySelect SpecificCavToggle
{
get { return _SpecificCavToggle; }
set
{
_SpecificCavToggle= value;
RaisePropertyChanged("SpecificCavToggle");
}
}
public MyViewModel()
{
this.CavTogglesProperties = GetCavities();
this.SpecificCavToggle = this.CavTogglesProperties[0];
}
public ObservableCollection<CavitySelect> GetCavities()
{
CavitySelect t11 = new CavitySelect();
CavitySelect t12 = new CavitySelect();
CavitySelect t13 = new CavitySelect();
CavitySelect t14 = new CavitySelect();
CavitySelect t15 = new CavitySelect();
CavitySelect t16 = new CavitySelect();
CavitySelect t26 = new CavitySelect();
CavitySelect t21 = new CavitySelect();
CavitySelect t22 = new CavitySelect();
CavitySelect t23 = new CavitySelect();
CavitySelect t24 = new CavitySelect();
CavitySelect t25 = new CavitySelect();
ObservableCollection<CavitySelect> temp = new ObservableCollection<CavitySelect>() {t11,t12,t13,t14,t15,t16,t21,t22,t23,t24,t25,t26};
return temp;
}
private observateCollection\u CavTogglesProperties;
公共可观察收集警告属性
{
获取{return\u CavTogglesProperties;}
设置
{
_CavTogglesProperties=值;
RaiseProperty已更改(“CavTogglesProperties”);
}
}
专用腔选择专用腔切换;
公共腔选择特定腔切换
{
获取{return}
设置
{
_SpecificCavToggle=值;
RaisePropertyChanged(“SpecificCavToggle”);
}
}
公共MyViewModel()
{
this.CavTogglesProperties=getCavests();
this.SpecificCavToggle=this.cavtogglesprroperties[0];
}
公共可观测集合getDecepts()
{
CavitySelectT11=新的CavitySelect();
CavitySelectT12=新的CavitySelect();
CavitySelectT13=新的CavitySelect();
CavitySelectT14=新的CavitySelect();
CavitySelectT15=新的CavitySelect();
CavitySelectT16=新的CavitySelect();
CavitySelectT26=新的CavitySelect();
CavitySelect t21=新的CavitySelect();
CavitySelect t22=新的CavitySelect();
CavitySelect t23=新的CavitySelect();
CavitySelectT24=新的CavitySelect();
CavitySelect t25=新的CavitySelect();
ObservableCollection temp=新的ObservableCollection(){t11,t12,t13,t14,t15,t16,t21,t22,t23,t24,t25,t26};
返回温度;
}
显示项目集合
你的问题不能使它成功