C# WPF-绑定到Integer/Double属性以显示X个矩形
我目前正在尝试设计一个“统计”窗口,它可以在RPG游戏中看到,例如,显示攻击、防御和生命分配的点数 例如,我的类中有属性Life,在我的XAML中,我有一个C# WPF-绑定到Integer/Double属性以显示X个矩形,c#,wpf,xaml,.net-4.6.2,C#,Wpf,Xaml,.net 4.6.2,我目前正在尝试设计一个“统计”窗口,它可以在RPG游戏中看到,例如,显示攻击、防御和生命分配的点数 例如,我的类中有属性Life,在我的XAML中,我有一个WrapPanel,我想在这里托管所有这些矩形,它们将表示属性Life所具有的每个点,如果该属性的值为“5”,然后,5个矩形将显示在WrapPanel中 是否可以在XAML中使用数据绑定而不用编写代码? 如果纯粹这样做是不可能的,那么是否可以通过编写转换器来实现呢 如果其中之一是可能的,如何实现 我试图在不在后端编写代码的情况下通过绑定来实现
WrapPanel
,我想在这里托管所有这些矩形,它们将表示属性Life所具有的每个点,如果该属性的值为“5”,然后,5个矩形
将显示在WrapPanel
中
是否可以在XAML中使用数据绑定而不用编写代码?
如果纯粹这样做是不可能的,那么是否可以通过编写转换器来实现呢
如果其中之一是可能的,如何实现
我试图在不在后端编写代码的情况下通过绑定来实现这一点,以尽可能减少代码的臃肿和简单
(5)不是最大值,它可以达到数据类型所能达到的最高值,所以你必须考虑那些矩形必须动态地插入绑定,而不是仅仅插入它们并改变可见性。 < P>首先编写一个转换器,它从给定的编号中生成项目数组:
public class NumberToItemsConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
return Enumerable.Range(1, System.Convert.ToInt32(value));
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
}
然后使用项目控制:
<ItemsControl ItemsSource="{Binding Value, Converter={StaticResource numToItems}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Rectangle Height="100"
Width="20"
Margin="5,0,5,0"
Fill="Red" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
为什么要投否决票?如果内容不令人满意,为什么不提供反馈以便我可以改进问题?添加5个矩形,将其可见性绑定到stat值,并在绑定上使用ValueConverter
,使其在值大于或等于该框的值时可见。您确实意识到,如果这些统计数据超过5,则无法工作,对吗?这就是为什么它首先在一个WrapPanel中,根据有多少自动水平和垂直定位它…创建一个公共只读属性,返回可枚举的范围(1,X)
,其中X是您的当前统计值。将ItemsControl
绑定到此项。我认为这对您很有用。您还可以编写一个IValueConverter
,将整数直接转换为Enumerable.Range(1,X)
。该转换器将消除viewmodel上的额外属性,并使更新通知更容易。IsItemsHost
对我来说是新的,MSDN上的文档也没有真正解释为什么需要,您能详细说明该部分吗?。谢谢你给我看一些新的东西。@BradleyUffner在这种情况下,它是不需要的(虽然也没有坏处),我只是使用它,因为我曾经这样做过。当你们把面板放在控制模板本身时,它是需要的(就像你们已经发现的那个样)。谢谢,我知道它就在这附近,但我不太确定怎么做。