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

  • Ben Schoon

    Ben Schoon

    23 Kasım 2012
  • Kyletiv7

    Kyletiv7

    28 Mayıs 2007
  • Maschine Tutorials

    Maschine Tut

    15 ŞUBAT 2011