2012-03-07 3 views
1

iv'e получил группу фигур, мне нужно решить, какое пребывание останется видимым и которое скрыто в соответствии с условиями буксировки (это будет представлять собой визуальный эффект кости)как передать значение конвертеру, которое является свойством в связанном элементе

(1) значение, которое они получают посредством привязки в контексте данных.

(2) значение их место в группе, которую я спас для каждой формы в его теги свойству

я нужен конвертер, чтобы получить Tag свойство в качестве параметра для каждой формы

моих связывание :(НЕПРАВИЛЬНО)

<Style TargetType="{x:Type Ellipse}"> 
    <Setter Property="Visibility" Value="{Binding Path=., Converter={StaticResource MyDiceInputToVisualConverter}}"></Setter> 
</Style> 

Мои фигуры:

<Canvas DataContext="{Binding Path=DataContext.Dice1,RelativeSource={RelativeSource AncestorType=StackPanel}}"> 
     <Ellipse Tag="1" Canvas.Left="5" Canvas.Top="5"></Ellipse> 
     <Ellipse Tag="2" Canvas.Left="5" Canvas.Top="20"></Ellipse> 
     <Ellipse Tag="3" Canvas.Left="5" Canvas.Top="35"></Ellipse> 
     <Ellipse Tag="4" Canvas.Left="20" Canvas.Top="20"></Ellipse> 
     <Ellipse Tag="5" Canvas.Left="35" Canvas.Top="5"></Ellipse> 
     <Ellipse Tag="6" Canvas.Left="35" Canvas.Top="20"></Ellipse> 
     <Ellipse Tag="7" Canvas.Left="35" Canvas.Top="35"></Ellipse> 
    </Canvas> 

мой конвертер не должен представлять интереса, все, что он делает, является видимым или скрытым. Согласно значению кости и месту Точки на кости, необходимо внести значение .

любые идеи, как я могу отправить конвертер свойство тега или, наоборот, ссылаться на него в конвертере?

благодарит заранее.

EDIT:

я в конечном итоге, явно устанавливая связывание в разметке каждого эллипса:

<Canvas DataContext="{Binding Path=DataContext.Dice1,RelativeSource={RelativeSource AncestorType=StackPanel}}"> 
    <Ellipse Tag="1" Canvas.Left="5" Canvas.Top="5" Visibility="{Binding Path=., Converter={StaticResource MyDiceInputToVisualConverter},ConverterParameter=1}"></Ellipse> 
    <Ellipse Tag="2" Canvas.Left="5" Canvas.Top="20" Visibility="{Binding Path=., Converter={StaticResource MyDiceInputToVisualConverter},ConverterParameter=2}"></Ellipse> 
    <Ellipse Tag="3" Canvas.Left="5" Canvas.Top="35" Visibility="{Binding Path=., Converter={StaticResource MyDiceInputToVisualConverter},ConverterParameter=3}"></Ellipse> 
</Canvas> 

еще если один, как любая идея, как включить это в стиле эллипса, чтобы избежать весь этот код повторите пожалуйста, дайте мне знать. Благодарю .

ответ

2

Я думаю, что вам нужно Multi-связывания:

<Page.Resources> 
    <WPFSampleExplorer:MyDiceInputToVisualConverter x:Key="MyDiceInputToVisualConverter" /> 
    <Style TargetType="{x:Type Ellipse}"> 
     <Setter Property="Visibility"> 
      <Setter.Value> 
       <MultiBinding Converter="{StaticResource MyDiceInputToVisualConverter}"> 
        <Binding RelativeSource="{RelativeSource Self}" Path="Tag"/> 
        <Binding /> 
       </MultiBinding> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Page.Resources> 

<Page.DataContext> 
    <Samples:DiceViewModel/> 
</Page.DataContext> 

<Canvas> 
    <Ellipse Tag="1" Canvas.Left="5" Canvas.Top="5" Width="20" Height="20" Fill="Yellow"></Ellipse> 
    <Ellipse Tag="2" Canvas.Left="5" Canvas.Top="20" Width="20" Height="20" Fill="Yellow"></Ellipse> 
    <Ellipse Tag="3" Canvas.Left="5" Canvas.Top="35" Width="20" Height="20" Fill="Yellow"></Ellipse> 
    <Ellipse Tag="4" Canvas.Left="20" Canvas.Top="20" Width="20" Height="20" Fill="Yellow"></Ellipse> 
    <Ellipse Tag="5" Canvas.Left="35" Canvas.Top="5" Width="20" Height="20" Fill="Yellow"></Ellipse> 
    <Ellipse Tag="6" Canvas.Left="35" Canvas.Top="20" Width="20" Height="20" Fill="Yellow"></Ellipse> 
    <Ellipse Tag="7" Canvas.Left="35" Canvas.Top="35" Width="20" Height="20" Fill="Yellow"></Ellipse> 
</Canvas> 

public class DiceViewModel 
{ 
    // properties here 
} 

public class MyDiceInputToVisualConverter : IMultiValueConverter 
{ 
    #region Implementation of IMultiValueConverter 

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     Debug.WriteLine(values[0]); // This outputs 1,2,3,..7 
     Debug.WriteLine(values[1]); // This is your DiceViewModel 

     return Visibility.Visible; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 
+0

спасибо Я новичок в этом не понял синтаксис ссылки на свойство тега. Вы бы использовали свойство тега, например iv'e done, или можете подумать о том, как лучше сохранить это значение? –

+0

Я скоро уйду. Отправьте свой вопрос. Кто-то поможет. – Phil

+0

Введите «перетаскивание wpf» в Google. Вы найдете множество примеров. – Phil

0

Если вы опустите ConverterParameter, ваш конвертер получит полный объект (Эллипс). Затем сделайте бросок вашего значения в Ellipse и получите свой тег.

+0

он получит его в качестве параметра? –

+0

nope, так как «value» – NestorArturo

+0

no, значение, заданное конструктору, будет значением значения Property Dice1 в моем источнике данных, который привязан к холсту. –