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

  • Droid Life

    Droid Life

    17 Kasım 2009
  • Ludique

    Ludique

    21 NİSAN 2009
  • Palmundo Ec

    Palmundo Ec

    11 HAZİRAN 2009