我在这个问题上被困了很长时间。我尝试了很多选项,但我无法正确理解语法。我尝试过的所有选项都显示数据类型,所有元素的相同名称,空白工具提示,无工具提示或LED位值。我可以显示一个LED数组,其中颜色由位值确定,但我需要将每个元素的名称添加到工具提示中。我使用数据模板来显示数组。
我最近的xaml:
<Window.Resources>
<DataTemplate x:Key="myLedTemplate" DataType="{x:Type sys:Byte}" >
<Border ... Background="{Binding Converter={StaticResource LEDConverter}}" ToolTip="{Binding Ledname}"/>
</DataTemplate>
<DataTemplate x:Key="myHwTemplate">
<Grid>
<Border>
<Grid>
<ItemsControl ItemsSource="{Binding Path=Led}" ItemTemplate="{StaticResource myLedTemplate}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" >
<ItemsControl.ItemsPanel>
...
</ItemsControl.ItemsPanel>
<ItemsControl.ToolTip>
<ToolTip>
<TextBlock Text="{Binding Path=Ledname}"/>
</ToolTip>
</ItemsControl.ToolTip>
</ItemsControl>
</Grid>
</Border>
</Grid>
</DataTemplate>
</Window.Resources>
<Grid>
<ItemsControl Name="hwItemControl" ItemTemplate="{StaticResource myHwTemplate}" ... >
...
</ItemsControl>
</Grid>
</Window>
我的班级类型
private byte[] led;
public byte[] Led
{
get { return led; }
set
{
byte[] input = value;
if (input != this.led)
{
this.led = input;
NotifyPropertyChanged();
}
}
}
private string[] ledname;
public string[] Ledname
{
get { return ledname; }
set
{
string[] input = value;
if (input != this.ledname)
{
this.ledname = input;
NotifyPropertyChanged();
}
}
}
现在,如果我将鼠标悬停在LED元素上,它会显示&#34; string [] Array&#34;。感谢您提供的任何建议。
答案 0 :(得分:0)
您正在绑定到一个字节数组,并且在您的项目模板中,您正在尝试获取led名称,但它位于不同的数组中。您的项目模板将仅引用ItemsSource属性的对象类型。
请改为尝试:
public class LED : INotifyPropertyChanged
{
private int _Value;
public int Value
{
get { return _Value; }
set { _Value = value; NotifyPropertyChanged(); }
}
private string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; NotifyPropertyChanged(); }
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged([CallerMemberName]string propertyName = null)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
创建一个名为LED的对象,它将保存您的LED值和LED名称,然后您可以使用此类的ObservableCollection并绑定到它。
public ObservableCollection<LED> LEDs { get; set; }
将ItemsSource绑定到集合LED,并绑定到项目模板中LED类中的属性。
<ItemsControl ItemsSource="{Binding Path=LEDs}" ...
<ItemsControl.ToolTip>
<ToolTip>
<TextBlock Text="{Binding Path=Name}"/>
</ToolTip>
</ItemsControl.ToolTip>