Wombo在ComboBox中绘制图元

时间:2018-07-27 08:07:16

标签: c# wpf xaml combobox itemtemplate

我正在制作用于网络图表示的程序。我在这里有许多用于两个节点之间连接的属性。实际上,我正在尝试制作一个带有MS Word中的破折号类型的组合框。我的ComboBox代码:

<ComboBox ItemsSource="{Binding Dashes}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Canvas >
                <Line X1="0" Y1="0" X2="100" Y2="100" StrokeDashArray="{Binding Dash}"/>
            </Canvas>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

后面的代码:

private DoubleCollection _dash;
private List<DoubleCollection> _listOfDashes;

public DoubleCollection Dash
{
    get { return _dash; }
    set
    {
        _dash = value;
        OnPropertyChanged("Dash");
    }
}

public List<DoubleCollection> Dashes
{
    get { return _listOfDashes; }
    set
    {
        _listOfDashes = value;
        OnPropertyChanged("Dashes");
    }
}

启动程序后,组合框不为空(有两个可选对象),但项目为空。我在哪里犯错了?

1 个答案:

答案 0 :(得分:1)

您正在将ItemsSource属性绑定到ViewModel Dashes属性。这意味着每个ItemTemplate都可以绑定到Dashes集合的每个元素(即DoubleCollection)上。

尝试以这种方式更改XAML:

<ComboBox ItemsSource="{Binding Dashes}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Line X1="0" Y1="0" X2="100" Y2="0" StrokeDashArray="{Binding}" Stroke="Black" Margin="6" />
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

这意味着每个Line的{​​{1}}绑定到属于StrokeDashArray集合的每个DoubleCollection。因此,这种方式:

Dashes

您将在vm = new ViewModel(); vm.Dashes = new List<DoubleCollection>(); vm.Dashes.Add(new DoubleCollection()); vm.Dashes[0].Add(2); vm.Dashes[0].Add(3); vm.Dashes.Add(new DoubleCollection()); vm.Dashes[1].Add(1); vm.Dashes[1].Add(4); 中看到两条不同的线。希望它能对您有所帮助。