我在我的Siverlight项目中使用了Galasoft的Light MVVM。
我已经按照指示设置好了一切:ViewModel绑定到了View的DataContext;
我在View中有一个名为inkCanvas的画布。
当ViewModel获得更新后的项目数据时,我需要引用inkCanvas来创建一个CanvasRender实例public CanvasRender(Canvas canvas, ProjectData pdata)。
问题出在MVVM中,ViewModel对View一无所知,那么我如何在View中引用控件(inkCanvas
附言(编辑):我的变通方法是:当我将项目数据传递给ViewModel时,我也传递了View的代码隐藏中的inkCanvas。
发布于 2012-09-26 02:28:54
根据上面的注释,一种方法是扩展Canvas,并将对CanvasRender的引用保留在该类中。
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成为一个依赖属性,以便它是可绑定的。
这允许您维护MVVM模式,因为现在您可以用XAML编写:
<local:MyCanvas ProjectData="{Binding ViewModel.ProjectData}" />https://stackoverflow.com/questions/12571529
复制相似问题