2014-04-11 44 views
0

剛剛開始使用Caliburn和WPF,並且在使用參數包含UserControl的過程中遇到困難。將UserControl和構造函數綁定到ViewModel

獲得了一個名爲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

有一個問題 - 將Collection 更改爲System.ComponentModel的ObservableCollection 。 – Ryan

+0

你想達到什麼目的?在你的MainView中加載ViewModel的視圖? –

+0

@Ryan有什麼具體的理由來改變這個嗎?從來沒有任何問題,我的自定義班。 – 0x8BADF00D

回答

0

從您的問題中不清楚ItemMoneyControlViewModel的關係。有到上市代碼一些潛在的變化,雖然:

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的當前索引...

看起來你可能需要一個ItemsControl並使用DataTemplate中有MoneyControl。這個問題可能會有所幫助:ItemsControl ItemTemplate Binding

+0

嗨,抱歉如此不清楚,完全更新了我的問題。我認爲你的解決方案是基於不同的問題。 – 0x8BADF00D

+0

您正在遍歷'Items'。您指定的綁定指示每個「Item」具有「Money」類型的「SellPrice」屬性,例如, 'Item.SellPrice'。對於綁定問題,你應該看看Snoop WPF:https://snoopwpf.codeplex.com/ – Ryan

+0

沒錯,每個Item都有這個屬性。我不明白爲什麼它不起作用。 – 0x8BADF00D

0

在您BuyPrice財產它所包含的類,需要您實現INotifyPropertyChanged和的SetterBuyPrice你必須提高實現的方法OnRaisedPropertyChanged("BuyPrice") (.Net 4.0)

相關問題