2016-04-03 23 views
0

TicTacToeGame gibi bir şey yapıyorum, MVVM kullanmaya çalışıyorum ve bu noktada bir sorunla karşılaştım. Anlayamıyorum (eğer mümkünse), farklı DataTempalte elemanlarına farklı isimler koyuyorum (tam olarak "Düğmeler"). DataTemplate öğelerine farklı adlar nasıl ayarlayabilirim?

<Window x:Class="TicTacToeCommand.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:TicTacToeCommand" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="500" Width="400" 
    Background="White" 
    Name="mainW"> 
<Window.Resources> 
    <Style x:Key="ButtonsStyle" TargetType="Button"> 
     <Setter Property="Command" Value="{Binding ElementName=mainW, Path=DataContext.GetButtonPressCommand}"></Setter> 
     <Setter Property="Margin" Value="5"></Setter> 
     <Setter Property="Background" Value="Black"></Setter> 
    </Style> 
</Window.Resources> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="47*"/> 
     <RowDefinition Height="20*"/> 
    </Grid.RowDefinitions> 
    <ItemsControl Grid.Row="0" ItemsSource="{Binding ButtonsList}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Button Content="{Binding Content}" 
         Name="b1" 
         Style="{StaticResource ButtonsStyle}" 
         CommandParameter="{Binding ElementName=b1, Path=Name}"> 
       </Button> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <UniformGrid Rows="3" Columns="3" Name="uniformGrid1"> 
       </UniformGrid> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
    </ItemsControl> 
</Grid> 
benim XAML kodunu var

. ... hepsi o ve alma çünkü ben hepsini farklı bir ad olması gerekir, Ve ayrıca, ben bir Komutanlığında Bir Komut Parametre olarak adını göndermeye çalışıyorum ama im daima "b1" adı alınırken

Mümkünse bundan sonra bu isimleri komuta yolluyorum?

Yardım için çok minnettar olacağım ve olası hatalar için lütfen beni önceden bilgilendirin.

cevap

0

eleman adı, özellikle şablonda,

<Button Content="{Binding Content}" 
     Name="b1" 
     Style="{StaticResource ButtonsStyle}" 
     CommandParameter="{Binding ElementName=b1, Path=Name}"> 

düğmesi burada bazı öğeye bağlı çok yardımcı olmuyor. Neden bu maddeyi CommandParameter olarak göndermiyorsunuz? düğmesine göndermek için,

<Button Content="{Binding Content}" 
     Style="{StaticResource ButtonsStyle}" 
     CommandParameter="{Binding Path=.}"> 

sonra görünümü modelinde Öğe türüne döküm ve tüm özelliklerini acces olsun (Content, vs)

+0

Evet, bunu yapabilirsiniz ama MVVM ihlali değil mi bu viewmodel için? – kotki

+0

Yine de elementlerime farklı isimler vermenin bir yolu var mı (b1, b2, b3 ...)? – kotki

+0

@kotki, görünüm modelinde 'ButtonsList' kullanıyorsunuz. CommandParameter bu listenin tek bir öğesi olacaktır. İlk bölüm sizin için kabul edilebilir ise, ikincisi aynıdır. isimleri ile ilgili: Ben bunu yapmaya çalıştım, basit attemp diyor ki Ading MarkerIxtension destekliyor Binding – ASh

İlgili konular