绑定" BindingList"使用转换器的DataTemplate不会更新

时间:2016-02-27 03:59:10

标签: c# wpf data-binding itemscontrol bindinglist

我有查看模型BindingList<Wave>

这是模型(仅显示一个属性)。

public class Wave : INotifyPropertyChanged
{
    private double _period;

    public double Period
    {
        get { return _period; }
        set
        {
            if (value.Equals(_period)) return;
            _period = value;
            OnPropertyChanged(nameof(Period));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

下面我尝试将视图模型绑定到画布并使用折线绘制它们,但只能使用一次。

问题在于,当我更改属性时,视图不会更新。 (转换器在第一次启动后不会启动。)

<ItemsControl ItemsSource="{Binding WaveCollection, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindow}}}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Polyline Points="{Binding Converter={StaticResource PlotterConverter}}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

PlotterConverter只返回PointCollection。有一些公式,但在这里并不重要。

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    return new PointCollection(GetPoints(value as Wave));
}

1 个答案:

答案 0 :(得分:0)

您没有使用Binding Mode = TwoWay

<Polyline Points="{Binding ., Mode=TwoWay, Converter={StaticResource PlotterConverter}}"/>