【发布时间】:2010-12-15 14:15:31
【问题描述】:
我有一个使用 MVVM 的应用程序。我在主窗口上有几个项目绑定到该窗口的 ViewModel。当我运行它时,一切正常。但是,当我将用户控件添加到主窗口并尝试绑定到其依赖对象之一时,它会引发异常(“对象引用未设置为对象的实例”)。异常窗口只是在屏幕上弹出,并没有链接到代码中的任何特定位置。异常中的任何其他信息都没有帮助。
我已尽力追查此事,但我没有任何运气。在 window 的构造函数中,我检查并验证了它尝试绑定的项目是否存在并且是一个对象 (int[])。我还在构造函数中手动设置了有问题的属性。 如果有人能注意到什么,这里有一些代码 sn-ps。
这里是我使用用户控件并尝试绑定到“视图”属性的地方
<local:Histogram Grid.Row="2" Grid.ColumnSpan="2"
View="{Binding Path=HistogramData}"
Foreground="{DynamicResource FontColor}"
BucketStroke="{DynamicResource BucketStrokeBrush}"
BucketFill="{DynamicResource BucketFillBrush}"
SelectedBrush="{DynamicResource FamilyEditListViewSelectedBrush}"
DisabledForegroundBrush="{DynamicResource DisabledForegroundBrush}"
AxisBrush="{DynamicResource AxisBrush}"
MaxHeight="130" />
这是我尝试绑定到的视图模型中的字段:
public int[] HistogramData
{
get
{
return histogramData;
}
set
{
if (value != histogramData)
{
histogramData = value;
RaisePropertyChanged("HistogramData");
}
}
}
并在视图模型的构造函数中实例化对象
histogramData = new int[256];
最后是用户控件中的视图属性
public static readonly DependencyProperty ViewProperty =
DependencyProperty.Register("View",
typeof(int[]),
typeof(Histogram),
new FrameworkPropertyMetadata(null,
FrameworkPropertyMetadataOptions.AffectsRender,
new PropertyChangedCallback(ViewProperty_Changed)));
public int[] View
{
get { return (int[])GetValue(ViewProperty); }
set { SetValue(ViewProperty, value); }
}
我不知道这是否足以解决任何问题,所以如果需要更多代码,请告诉我。如果有人愿意看这个,我也可以压缩这个项目。提前致谢。
【问题讨论】:
标签: wpf user-controls mvvm binding