SORU
29 AĞUSTOS 2009, CUMARTESİ


Geçen iki komut parametreleri bir WPF binding kullanarak

XAML dosyası aşağıdaki standart sözdizimini kullanarak idam ediyorum ki bir komut var:

<Button Content="Zoom" Command="{Binding MyViewModel.ZoomCommand}"/>

Bu sırada görünümünden İKİ parça bilgi bu işlem kullanıcıların beklediği şekilde (tuval specfically genişlik ve yükseklik) tamamlamak için ihtiyacım olduğunu fark edene kadar gayet güzel çalıştı.

Mümkün benim komut için bir argüman olarak bir dizi geçmek gibi görünüyor, ama orada CommandParameter iki tuval ... ... özellikler için bağlayıcı belirtmek için bir yol olarak görmüyorum:

<Button Content="Zoom" 
        Command="{Binding MyViewModel.ZoomCommand" 
        CommandParameter={Binding ElementName=MyCanvas, Path=Width}"/>

Nasıl benim komut için hem Genişlik ve Yükseklik geçtim mi? Bu XAML komutları kullanarak mümkün gibi görünmüyor ve benim codebehind tıklatın işleyicisi bu bilgi benim yöntemi zoom geçirmek için kablo gerekiyor.

CEVAP
29 AĞUSTOS 2009, CUMARTESİ


Genellikle bu Bilgi olurdu MVVM yapıyorsan öncelikle, ayrı özellikleri üzerinden VM için kullanılabilir görünümünden bağlı. Herhangi bir parametre geçmek için komutları zorunda kaydeder.

Ancak, da-bağlama çoklu ve parametreleri oluşturmak için bir dönüştürücü kullanabilirsiniz:

<Button Content="Zoom" Command="{Binding MyViewModel.ZoomCommand" CommandParameter={Binding ElementName=MyCanvas, Path=Width}"
    <Button.CommandParameter>
        <MultiBinding Converter="{StaticResource YourConverter}">
             <Binding Path="Width" ElementName="MyCanvas"/>
             <Binding Path="Height" ElementName="MyCanvas"/>
        </MultiBinding>
    </Button.CommandParameter>
</Button>

Dönüştürücü:

public class YourConverter : IMultiValueConverter
{
    public object Convert(object[] values, ...)
    {
        return values.Clone();
    }

    ...
}

Daha sonra komut çalıştırma mantığı

public void OnExecute(object parameter)
{
    var values = (object[])parameter;
    var width = (double)values[0];
    var height = (double)values[1];
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Mark Hyder

    Mark Hyder

    6 EKİM 2011
  • skiesofblack.net

    skiesofblack

    14 HAZİRAN 2009
  • Yanko Kral

    Yanko Kral

    8 HAZİRAN 2006