我正在为我的 Siverlight 项目使用 Galasoft 的 Light MVVM。
我已按照指示设置了所有内容:ViewModel
绑定(bind)到 View
的DataContext
;
我有一个名为 inkCanvas
的 Canvas 在 View
.
当ViewModel
获取更新的项目数据,需要引用inkCanvas
创建 CanvasRender
实例 public CanvasRender(Canvas canvas, ProjectData pdata)
.
问题出在 MVVM 中,ViewModel
对 View
一无所知,那么如何在 inkCanvas
中引用控件( View
) ?
附言(已编辑):我所做的解决方法是:当我将项目数据传递给 ViewModel
,我也传了inkCanvas
来自 View
的代码隐藏。嗯,现在我的代码隐藏不干净。
最佳答案
根据上面的评论,一种方法是扩展 Canvas
并保留对 CanvasRender
的引用那个类(class)里面。
public class MyCanvas : Canvas
{
private CanvasRender _canvasRender;
private ProjectData _data;
public ProjectData Data
{
get { return _data; }
set
{
_data = value;
_canvasRender = new CanvasRender(this, _data);
}
}
public MyCanvas() : base()
{
}
}
您可能还想制作
ProjectData
一个依赖属性,以便它是可绑定(bind)的。这允许您维护 MVVM 模式,因为现在您可以在 XAML 中编写:
<local:MyCanvas ProjectData="{Binding ViewModel.ProjectData}" />
关于silverlight - 如何解决引用 View 的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12571529/