ValueConverter只触发一次

本文关键字:一次 ValueConverter | 更新日期: 2023-09-27 18:27:38

我有一个WPF值转换器来转换项控件的项,该控件在加载xaml视图时启动。

我的问题是,当itemsource集合引发notify属性更改事件时,值转换器似乎没有启动。

这是我的xaml:

<ItemsControl ItemsSource="{Binding StackupViewModel.Layers}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ContentPresenter>
                <ContentPresenter.Content>
                    <MultiBinding Converter="{StaticResource LayerToRectangle}">
                        <Binding />
                        <Binding ElementName="rgv"/>
                    </MultiBinding>
                </ContentPresenter.Content>
            </ContentPresenter>
        </DataTemplate>
    </ItemsControl.ItemTemplate>

这是我的转换器

public object Convert(
        object[] values,
        Type targetType,
        object parameter,
        System.Globalization.CultureInfo culture)
    {
        var layer = values.First() as Layer;
        var radGridView = values[1] as RadGridView;
        var column = radGridView.Columns["Lamination"];
        var row = radGridView.Items[0];
        var cellToEdit = new GridViewCellInfo(row, column, radGridView);
        radGridView.CurrentCellInfo = cellToEdit;
        radGridView.Focus();
        Rectangle rectangle = new Rectangle();
        if (radGridView.CurrentCell != null)
        {
            Point p = radGridView.CurrentCell.TranslatePoint(new Point(0, 0), radGridView);
            rectangle.Height = radGridView.RowHeight - 10;
            rectangle.Width = column.ActualWidth;
            rectangle.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(layer.ColorHex);
            Canvas.SetTop(rectangle, p.Y + layer.LayerNumber);
            Canvas.SetLeft(rectangle, p.X);
        }


        return rectangle;
    }

我在xaml中添加了一个按钮来触发Layers observable集合上的notifypropertychanged,如下所示:

<Button Name="btnDraw" Command="{Binding StackupViewModel.ScrollCommand}" />
private void ScrollCommandHandler(object offset)
{
    RaisePropertyChanged(() => this.Layers);
}

有人能告诉我为什么点击按钮时转换器没有启动吗?

ValueConverter只触发一次

第一个绑定的上下文只是一个单独的Layer对象,而不是Layers父集合,因此当您调用ScrollCommandHandler方法时,MultiBinding不会注册任何PropertyChanged