[英]Binding an UserControl with a constructor to ViewModel
刚开始使用Caliburn和WPF,并被困在将Window的参数作为UserControl的一部分。
得到了一个名为Item
类,该类具有名为SellPrice
的属性,该属性返回Money
对象。 我想将此Money
对象转移到UserControl以格式化该对象中的数据。 如何转移物品? 我需要使用构造函数吗?
MainView.xaml
<DataGridTemplateColumn Header="Sell Price">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<local:MoneyControlView/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
如果没有任何参数,以上代码可以正常工作,但是如何传递Money
对象呢?
我确实尝试通过DependencyProperty做到这一点,如下所示:
public partial class MoneyControlView : UserControl
{
public static readonly DependencyProperty MoneyProperty = DependencyProperty.Register
(
"Money",
typeof(Money),
typeof(MoneyControlView),
new PropertyMetadata(new Money())
);
public Money Money
{
get { return (Money)GetValue(MoneyProperty); }
set { SetValue(MoneyProperty, value); }
}
public MoneyControlView()
{
InitializeComponent();
DataContext = new MoneyControlViewModel(Money);
}
}
但是,使用时:
<local:MoneyControlView Money="{Binding BuyPrice}"/>
它不起作用。 该属性保持为空。
从您的问题尚不清楚, Item
与MoneyControlViewModel
关系如何。 但是,对列出的代码有一些潜在的更改:
1)将Collection<Item>
更改为ObservableCollection<Item>
2)假设Item
类具有Money
属性,该属性返回MoneyControlViewModel
...在XAML中,更改DataGridTemplateColumn:
<DataGridTemplateColumn Header="Sell Price">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl x:Name="SellPrice" cal:View.Model="{Binding Money}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
您的问题的这一部分不清楚:
如何为列表中的每个项目实现Money UserControl? 如果我得到了DataGrid的当前索引以便从Item中检索Money对象,那将不是问题...
看来您可能需要ItemsControl并将DataTemplate与MoneyControl一起使用。 这个问题可能会有所帮助: ItemsControl ItemTemplate绑定
在包含它的BuyPrice
属性的类上,要求您实现INotifyPropertyChanged
,在BuyPrice
的Setter
上,您必须引发实现的方法OnRaisedPropertyChanged("BuyPrice") (.Net 4.0)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.