【发布时间】:2021-09-26 22:14:31
【问题描述】:
我遇到了绑定问题 我正在尝试将项目列表绑定到项目控件。 我确实可以正常工作,但我遇到了一些绑定错误,具体取决于 WidgetVM 的定义方式。
如果 WidgetVM 继承自 thumb(这是我想要的),它不会出现在画布上。任何其他的控制派生也是如此。现在构造函数中定义的三个项目在 Live 可视化树中的位置,但 Canvas.Left 和 Canvas .Top 属性为 NaN,我猜这就是它们没有显示的原因
还有绑定错误,说明在 MainWindow 类型上找不到 Position 属性? 我无法弄清楚为什么它在 MainWindow 而不是 WidgetVM 中查找值。当我从 Thumb 中删除继承时,这些错误就会消失。
如果我从 WidgetVM 删除继承,文本值会按预期显示在屏幕上 因此放置项目的代码有效,但当对象派生自拇指等控件时则无效。
当 WidgetVM 继承自 Thumb 因为我想使用拖动增量功能时,我如何才能让它工作。谢谢。
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=WidgetName}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding Path=Position.X}"/>
<Setter Property="Canvas.Top" Value="{Binding Path=Position.Y}"/>
</Style>
</ItemsControl.ItemContainerStyle>
后面的代码如下
public partial class MainWindow : Window, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string v)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(v));
}
private ObservableCollection<Widgetvm> Widgets;
public ObservableCollection<Widgetvm> Widgets
{
get { return Widgets; }
set { Widgets = value; OnPropertyChanged("Widgets"); }
}
public MainWindow()
{
Widgets = new ObservableCollection<Widgetvm>()
{
new Widgetvm (){WidgetName="initial", Position = new Point(30,30) },
new Widgetvm (){WidgetName="inbetween", Position = new Point(120,130) },
new Widgetvm (){WidgetName="final", Position = new Point(330,330) },
};
InitializeComponent();
}
}
Widgetvm定义如下
public class Widgetvm : Thumb, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string v)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(v));
}
private string WidgetName;
public string WidgetName
{
get { return WidgetName; }
set { WidgetName = value; OnPropertyChanged("WidgetName"); }
}
private Point position;
public Point Position
{
get { return position; }
set { position = value; OnPropertyChanged("Position"); }
}
}
【问题讨论】:
标签: c# wpf data-binding