1

每当重绘面板时,我目前正在对 valueconverter 中的数据进行一些重新缩放。我想将其中的一些处理移至视图模型,因为大部分处理仅在控件大小或其他一些属性发生变化时发生。

为了确保重新缩放的数据看起来可以接受,我需要ActualWidthviewmodel 中的容器。我想以一种方式将它绑定到视图模型的属性,这样当它发生变化时,我可以触发重新缩放处理。

我能找到的所有示例都将 CLR 或依赖属性绑定到一个元素,而不是其他方式,我显然在理解中遗漏了一些东西来弄清楚我应该如何做。我已经尝试了一些不同的方法来设置绑定,但只是没有做对。

有什么提示吗?谢谢。

在 MyView XAML 中:

<myItemsControl/>

在后面的 MyView 代码中,类似于:

Binding b = new Binding(MyWidthProperty);
b.Mode = BindingMode.OneWay;
b.Source = myItemsControl.Name;
.........?

public static readonly DependencyProperty MyWidthProperty = 
DependencyProperty.Register( "MyWidth", typeof(Double), typeof(MyViewModel));

在 MyViewModel 中:

    public Double MyWidth{
        get { return _myWidth; }
        set { _myWidth = value; ViewChanged(this); } }
4

1 回答 1

2

你不能这样做。您不能将 a 设置BindingActualWidth,因为它是只读的。

您只能将绑定设置为MyWidth. 但为此,您需要首先将 MyWidth 转换为DependencyProperty. 然后你就可以做类似的事情

Binding b = new Binding("ActualWidth") { Source = myItemsControl };
this.SetBinding(MyViewModel.MyWidthProperty, b);

要转换为依赖属性,您需要将您的定义替换MyWidth为以下内容:

public static readonly DependencyProperty MyWidthProperty =
    DependencyProperty.Register("MyWidth", typeof(double), typeof(MyViewModel),
                                        new UIPropertyMetadata(
                                            0.0,
                                            (d, e) =>
                                            {
                                                var self = (MyViewModel)d;
                                                ViewChanged(self);
                                            }));

但要小心依赖属性;最好先阅读文档。

编辑:您还需要以这种方式定义属性:

public double MyWidth
{
    get { return (double)this.GetValue(MyWidthProperty); }
    set { this.SetValue(MyWidthProperty, value); } 
}
于 2010-11-15T17:15:17.020 回答