刚刚开始使用Caliburn和WPF,并坚持将带有参数的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}"/>
它不起作用。该物业仍为空。
答案 0 :(得分:0)
从您的问题中不清楚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 Binding
答案 1 :(得分:0)
在您的BuyPrice
属性所包含的课程中,要求您实施INotifyPropertyChanged
并在Setter
的{{1}}上提升实施的方法{{ 1}}。