【发布时间】:2018-02-07 16:56:45
【问题描述】:
我有如下标记
XAML
<ComboBox Grid.Row="0" Margin="15,54,352,231" IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding OptimizationTypes}" DisplayMemberPath="TypeName"
SelectedIndex="{Binding SelectedIndex, UpdateSourceTrigger=PropertyChanged}">
<ComboBox.DataContext >
<viewModels:MyViewModel />
</ComboBox.DataContext>
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="IsEnabled" Value="{Binding IsItemEnabled}" />
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
视图模型
using System.Collections.Specialized;
namespace WpfApplication
{
public class MyViewModel : INotifyCollectionChanged
{
public event NotifyCollectionChangedEventHandler CollectionChanged;
public bool IsItemEnabled { get; set; }
public MyViewModel(IBaseControlElement baseControlElement)
{
//some code
}
}
}
位于我的视图模型上的布尔属性 IsItemEnabled 不适用于此设置器,并且绑定不起作用。据我所知,活页夹试图找到不在 MyViewModel 中的属性。如何解决?我可以只为组合框设置数据上下文,还是在这种情况下还有其他方法?
【问题讨论】:
-
为什么不能使用带有非无参数构造函数的视图模型作为DataContext?这与您遇到的任何绑定错误有什么关系?
-
你到底得到了什么错误?我们都不是魔术师,我们只是程序员。
-
"没有无参数构造函数,因此不能作为数据上下文" -- 不成立。拥有无参数构造函数不是成为
DataContext值的先决条件。实际上,在ComboBox中,一个视图模型对象通常是在代码隐藏中创建的,而不是在 XAML 中创建的,并且将参数传递给构造函数是微不足道的。无论您的代码中发生了什么,都不是因为该对象没有无参数构造函数。请解决您的问题。对于初学者,请参阅 minimal reproducible example 和 How to Ask。 -
只是工具提示:MyViewModel 类型不包含任何可访问的构造函数
-
对不起。我已经改变了我的问题。让我们忘记 datacontext 和我对此的结论。无论如何,该怎么做