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

  • happyjpy

    happyjpy

    22 AĞUSTOS 2009
  • Julian Smith

    Julian Smith

    31 EKİM 2006
  • Mark Brown

    Mark Brown

    9 HAZİRAN 2010