Pergunta

Só comecei a usar Caliburn e WPF e ficou preso em incluindo um UserControl com um parâmetro para a minha Janela.

Tenho uma classe chamada Item com uma propriedade chamada SellPrice que retorna um Money objecto.Eu quero transferir esse Money objeto para um UserControl para formatar os dados deste objeto.Como faço para transferir o objeto?Eu preciso usar o construtor?

MainView.xaml

<DataGridTemplateColumn Header="Sell Price">
     <DataGridTemplateColumn.CellTemplate>
         <DataTemplate>
            <local:MoneyControlView/>
         </DataTemplate>
     </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn>

Código acima funciona bem se não existisse qualquer parâmetro, mas como faço para passar o Money objeto?

Eu tentei fazê-lo através de DependencyProperty da seguinte forma:

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);
    }
}

No entanto, quando usá-lo:

<local:MoneyControlView Money="{Binding BuyPrice}"/>

ele não funciona.a Propriedade permanece vazio.

Foi útil?

Solução

Não está claro a partir de sua pergunta, como um Item refere-se a uma MoneyControlViewModel.Existem várias possibilidades de mudanças para o código, que:

1) Alterar Collection<Item> para ObservableCollection<Item>

2) Supondo que o Item a classe tem um Money propriedade que retorna um MoneyControlViewModel...No XAML, alterar o DataGridTemplateColumn:

<DataGridTemplateColumn Header="Sell Price">
     <DataGridTemplateColumn.CellTemplate>
         <DataTemplate>
            <ContentControl x:Name="SellPrice" cal:View.Model="{Binding Money}"/>
         </DataTemplate>
     </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn>

Esta parte da sua pergunta não está clara:

Como faço para implementar o Dinheiro UserControl para cada Item na minha lista?Não seria um problema se eu tenho o índice atual de DataGrid em a fim de recuperar o Dinheiro objeto do Item...

Parece que você pode desejar um ItemsControl e usar um DataTemplate com um MoneyControl.Esta questão pode ajudar: ItemsControl ItemTemplate Ligação

Outras dicas

Sobre a classe a que a BuyPrice propriedade contém, requer que você para implementar INotifyPropertyChanged e no Setter do BuyPrice você tem que levantar o método implementado OnRaisedPropertyChanged("BuyPrice") (.Net 4.0).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top