我正在制作用于网络图表示的程序。我在这里有许多用于两个节点之间连接的属性。实际上,我正在尝试制作一个带有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");
}
}
启动程序后,组合框不为空(有两个可选对象),但项目为空。我在哪里犯错了?
答案 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);
中看到两条不同的线。希望它能对您有所帮助。