C# 依赖项属性画布未绑定
我正在制作一个可以编辑图像的工具,所以我有一个自定义控件可以在画布上绘制。对于这个控件,我绑定了画笔的分辨率和颜色,效果非常好,但是当我尝试绑定画布时,我在myViewModel中总是得到null 我试着绑定一个列表,但也没用。我已经试着找出问题出在哪里了大约12个小时了,所以我想是时候请你们帮忙了,这样我也许可以找出问题出在哪里 我曾经在viewmodels中使用单例,然后我可以很好地链接到画布,但后来我意识到这是一种糟糕的工作方式,所以我尝试将其与依赖属性绑定 每当我尝试访问画布时,它的值为null,即使我初始化了它 控制C# 依赖项属性画布未绑定,c#,wpf,canvas,controls,viewmodel,C#,Wpf,Canvas,Controls,Viewmodel,我正在制作一个可以编辑图像的工具,所以我有一个自定义控件可以在画布上绘制。对于这个控件,我绑定了画笔的分辨率和颜色,效果非常好,但是当我尝试绑定画布时,我在myViewModel中总是得到null 我试着绑定一个列表,但也没用。我已经试着找出问题出在哪里了大约12个小时了,所以我想是时候请你们帮忙了,这样我也许可以找出问题出在哪里 我曾经在viewmodels中使用单例,然后我可以很好地链接到画布,但后来我意识到这是一种糟糕的工作方式,所以我尝试将其与依赖属性绑定 每当我尝试访问画布时,它的值为
public static readonly DependencyProperty CanvasProperty = DependencyProperty.Register(
"CanvasToDraw", typeof(Canvas), typeof(DrawCanvas), new PropertyMetadata(default(Canvas), null, null));
public Canvas CanvasToDraw
{
get { return (Canvas)GetValue(CanvasProperty); }
set { SetValue(CanvasProperty, value); }
}
public DrawCanvas()
{
InitializeComponent();
CanvasToDraw = CanvasGrid;
}
XAML
<Controls:DrawCanvas x:Name="DrawCanvas1" Resolution="{Binding Resolution}" CanvasToDraw="{Binding DrawingCanvas}" RectangleList="{Binding RectangleList, ElementName=DrawCanvas1}" ColorToDraw="{Binding SelectedColor}" HorizontalAlignment="Left" Height="256" Margin="10,40,0,0" VerticalAlignment="Top" Width="256" />
private Canvas _drawingCanvas;
public Canvas DrawingCanvas
{
get { return _drawingCanvas; }
set
{
_drawingCanvas = value;
OnPropertyChanged("DrawingCanvas");
}
}
如果需要,我可以提供更多的代码,但这是大部分相关代码。是的,我确实使用INotifyPropertyChanged,因为我绑定了其他可以工作的东西。我一直在寻找解决方案,但答案很简单。我假设绑定是双向的,但显然我必须设置Mode=TwoWay,一切都像一个符咒。(链接ObservableCollection,而不是画布)请注意,视图模型中不应包含UI元素(如DrawingCanvas)。除此之外,“即使我初始化了它”,你是指分配
CanvasToDraw=CanvasGrid代码>在DrawCanvas构造函数中?是的,这是正确的方法吗?您认为从画布获取数据的最佳方式是什么?画布存在于矩形之外,在本例中,矩形是像素,当我按下按钮“清洁”画布时,我需要访问它们以使它们变为白色。我尝试绑定矩形列表,但由于某种原因(可能我需要在特定位置或其他地方对其进行初始化)+CanvasGrid是画布的名称,我使用BlockViewModel.Instance.Canvas=CanvasGrid将其链接起来。但是我停止使用实例。您应该使用一个带有画布的ItemsControl作为ItemsPanel,如图所示。您的初始化将无法工作,因为该值已被绑定替换。它返回null
,因为视图模型中的源属性是null
。绑定也必须是双向的。好的,我将查找一些关于ItemsControl的内容,并尝试找出如何在我的应用程序中使用它,谢谢您的帮助。