【发布时间】:2020-06-05 09:11:25
【问题描述】:
我正在使用 MVVMLight,并且需要能够在视图初始化期间对大约 12 个切换框的属性进行编程编辑。由于它们太多了,我想遍历链接的属性,我尝试使用 ObservableCollection 的 ObservableObject 包含要绑定到切换按钮属性的值。我不确定这是绑定问题还是继承自 ObservableObject 的 INotifyPropertyChanged 接口的错误实现。
这是包含我希望绑定到的属性的类:
public class CavitySelect : ObservableObject
{
private string _Text;
public string Text
{
get { return _Text; }
set
{
_Text = value;
RaisePropertyChanged("Text");
}
}
private bool _Visible;
public bool Visible
{
get { return _Visible; }
set
{
_Visible = value;
RaisePropertyChanged("Visible");
}
}
private bool _Toggle;
public bool Toggle
{
get { return _Toggle; }
set
{
_Toggle = value;
RaisePropertyChanged("Toggle");
}
}
public CavitySelect()
{
Text = "";
Visible = false;
Toggle = false;
}
}
这是我的ObservableCollection的实例化:
private ObservableCollection<CavitySelect> _CavTogglesProperties;
public ObservableCollection<CavitySelect> CavTogglesProperties
{
get { return _CavTogglesProperties; }
set
{
_CavTogglesProperties = value;
RaisePropertyChanged("CavTogglesProperties");
}
}
public MyViewModel()
{
this.CavTogglesProperties = GetCavities();
}
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;
}
这是我尝试绑定它的方式:
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVisibilty"/>
</Window.Resources>
<Grid Background="#FFF4F4F5" Margin="8,165,8,8" DataContext="{Binding CavTogglesProperties}">
<ToggleButton DataContext="{Binding t11}" Content="{Binding Text}" IsChecked="{Binding Toggle}" Visibility="{Binding Visible,Converter={StaticResource BoolToVisibilty}}"/>
</Grid>
我已确认 View 与 ViewModel 类的绑定工作正常。我也尝试过绑定而不首先设置包含网格的DataContext,例如:
<ToggleButton DataContext="{Binding CavTogglesProperties[t11]}" ... />
为了澄清: 每个 CavitySelect 项都与 GridView 中的一个切换按钮相关,并且属性将基于未显示的输入进行初始化。
【问题讨论】:
-
您想显示一个 ToggleButtons 列表,CavTogglesProperties 中的每个项目都有一个吗?还是只显示 CavTogglesProperties 中的单个项目?
-
用两种解释来回答。希望对您有所帮助!
-
我希望能够以编程方式更改哪些 ToggleButtons 可见及其文本。
-
太棒了。在这种情况下,请看一下我的答案的前半部分 - 显示项目集合。这显示了如何使用 ListView,并指向另一个问题,解释如何向为 ListView 供电的集合添加过滤器。然后,您可以根据需要根据“可见”属性进行过滤。
标签: c# wpf mvvm mvvm-light observablecollection