内容绑定仅适用于整数和字符串
本文关键字:整数 字符串 适用于 绑定 | 更新日期: 2023-09-27 17:55:45
我对 XAML 很陌生,必须为大学从事一个现有的项目。不幸的是,我对如何准确处理内容绑定感到非常困惑。我有以下 XAML 代码(代码片段):
<!-- SnapshotsV.xaml -->
<s:ScatterView Grid.Row="1" Grid.Column="1" Grid.RowSpan="2" Panel.ZIndex="2" Name="SnapshotsScatterView" ItemsSource="{Binding Path=SnapshotsCollection}" AllowDrop="False" Background="#FF151515" Width="{Binding ScrollContainerWidth}">
<s:ScatterView.ItemContainerStyle>
<Style TargetType="s:ScatterViewItem">
<Setter Property="Height" Value="300"/>
<Setter Property="Width" Value="300"/>
<Setter Property="Orientation" Value="0"/>
<Setter Property="CanScale" Value="False"/>
<Setter Property="CanMove" Value="True" />
<Setter Property="CanRotate" Value="False" />
<Setter Property="Center" Value="{Binding Path=ItemPosition}" />
</Style>
</s:ScatterView.ItemContainerStyle>
<s:ScatterView.ItemTemplate>
<DataTemplate>
<Grid>
<Label Content="{Binding Path=ID}" />
<Image Source="{Binding Path=SnapshotImage}" />
</Grid>
</DataTemplate>
</s:ScatterView.ItemTemplate>
</s:ScatterView>
以下视图模型属于此视图(代码段):
// SnapshotsVm.cs
public class SnapshotsVm : ViewModelBase
{
[...]
public ObservableCollection<SnapshotItem> SnapshotsCollection
{
get { return SnapshotMaker.SnapshotItemCollection; }
}
}
SnapshotsItemCollection 是具有一个或多个 SnapshotItem-Classes 的列表。它按ObservableCollection<SnapshotItem>
实现。快照项类如下所示:
public class SnapshotItem : ViewModelBase
{
private int _Id;
private Image _Image;
private String _XMLString;
private Point _position;
public int ID
{
get { return _Id; }
}
public String Test { get { return "abc"; } }
public Image SnapshotImage
{
get { return _Image; }
}
public String XMLString
{
get { return _XMLString; }
}
public Point ItemPosition
{
get { return _position; }
}
public SnapshotItem(int id, String SnapshotDirectory)
{
this._Id = id;
this._Image = Image.FromFile(SnapshotDirectory + @"'snapshot-" + id + @".png");
this._XMLString = null; //TODO later
this._position = new Point(id*400+200, 200);
}
}
目前为止,一切都好。
我不明白的是,内容绑定仅适用于某些数据类型。正如您在 SnapshotItem 类中看到的,有一个名为 ID 的整数和一个名为 Test 的字符串。当我通过 {绑定路径=ID} 或 {绑定路径=测试} 绑定它们时,它们在 XAML 中工作正常。其他数据属性(如快照映像或项目位置)不起作用。
我通过断点检查了快照项类中的变量。它们在构造函数中成功且正确设置。但我不明白为什么我不能将它们用于我的内容绑定。
此外,我注意到当我直接在 SnapshotsVm.cs 文件中创建快照项时,它可以工作。我在那里创建了一个类似的类,用随机数据填充它,它工作得很好。但出于代码逻辑原因,我想在静态 SnapshotMaker 类中创建快照项。元素的创建工作正常,我可以在 GUI 中看到它们。但是 ItemPosition 和 SnapshotImage 无法绑定。
您的ScatterView
(即 ItemsSource="{Binding Path=SnapshotsCollection}"
) 在首次设置SnapshotsCollection
时发生。因此,您需要在创建集合时初始化所有数据(例如位置、图像等)。 它应该看起来像这样:
SnapshotsCollection = new ObservableCollection<SnapshotItem>();
int Id = 1;
var point = new Point(800,200);
var image = Image.FromFile(SnapshotDirectory + @"'snapshot-" + id + @".png");
SnapshotsCollection.Add(SnapshotMaker.Create(1, point, image));
好的,我自己找到了解决方案。我犯了几个错误。
ImageSource={Binding Path=SnapshotImage} 采用映像所在的字符串。以这种方式无法将图像作为自身传递。我应该更仔细地阅读文档。
更棘手的方法是不工作点。我没有认识到我使用了导入System.Drawing.Point中的点。当我使用System.Windows.Point时,它可以工作。
应用这两个更改时,一切都按预期工作。