2015-07-29 7 views
0

Я пытаюсь сделать перевернуть некоторые прямоугольники из моего MainWindow. Что я хочу сделать, вместо того, чтобы использовать кнопку, пытается получить событие, чтобы запустить flipping. Я попытался связать событие в пользовательском классе с ICommand, который является известным ScrollBehavior. Проблема заключается в том, когда программа загружает это исключение разжигает:C#/WPF - DataEventTrigger или как вызвать событие

XamlParseException на Interactivity.TriggersCollection

Изображение что-то вроде:

Rectangles on View

Из того, что у меня есть, событие

public class FlipClass 
{ 
    int i = 0; 
    public void FlipEvent(object sender, EventArgs e) 
    { 
     i++; 
     Console.WriteLine(i); 
     myTestingString = johnny; 
    } 
} 

Этот класс связан с моим MainWindow благодаря DataContext согласно следующему:

public MainWindow() 
    { 
     InitializeComponent(); 

     FlipClass() _flipClass = new FlipClass(); 



     this.WindowStartupLocation = WindowStartupLocation.CenterScreen; 


     DataContext = _flipClass;  //The Context is here 


     Stopwatch moi = new Stopwatch(); 
     moi.Start(): //Monitoring the Window 



     moi.Stop(); 
     Console.WriteLine(moi.ElapsedMilliseconds); 


     Closing += OnClosing;    

    } 

Наконец в моем XAML коде, у меня есть этот

<ec:PathListBox x:Name="pathListBox" Margin="312,566.254,299.5,407" WrapItems="True" ItemContainerStyle="{DynamicResource PathListBoxItemStyle1}"> 
     <i:Interaction.Behaviors> 
      <local:PathListBoxScrollBehavior> 
       <i:Interaction.Triggers> 
        <local:DataEventTrigger EventName="FlipEvent"> <------- This is Where I get the Exception 
         <i:InvokeCommandAction CommandName="DecrementCommand"/> 
        </local:DataEventTrigger> 
       </i:Interaction.Triggers> 
       <local:PathListBoxScrollBehavior.Ease> 
        <QuarticEase EasingMode="EaseOut"/> 
       </local:PathListBoxScrollBehavior.Ease> 
      </local:PathListBoxScrollBehavior> 
     </i:Interaction.Behaviors> 
     <ec:PathListBox.LayoutPaths> 
      <ec:LayoutPath SourceElement="{Binding ElementName=path}" Distribution="Even" Capacity="3"/> 
     </ec:PathListBox.LayoutPaths> 
     <Rectangle HorizontalAlignment="Left" Height="139.96" Stroke="#FF6DBDD1" StrokeThickness="1" VerticalAlignment="Top" Width="202" Fill="#FFA7CEF5"/> 
     <Rectangle HorizontalAlignment="Left" Height="139.96" Stroke="#FF6DBDD1" StrokeThickness="1" VerticalAlignment="Top" Width="202" Fill="#FFA7CEF5"/> 
     <Rectangle HorizontalAlignment="Left" Height="139.96" Stroke="#FF6DBDD1" StrokeThickness="1" VerticalAlignment="Top" Width="202" Fill="#FFA7CEF5"/> 
     <Rectangle HorizontalAlignment="Left" Height="139.96" Stroke="#FF6DBDD1" StrokeThickness="1" VerticalAlignment="Top" Width="202" Fill="#FFA7CEF5"/> 
     <Rectangle HorizontalAlignment="Left" Height="139.96" Stroke="#FF6DBDD1" StrokeThickness="1" VerticalAlignment="Top" Width="202" Fill="#FFA7CEF5"/> 
     <Rectangle HorizontalAlignment="Left" Height="139.96" Stroke="#FF6DBDD1" StrokeThickness="1" VerticalAlignment="Top" Width="202" Fill="#FFA7CEF5"/> 
    </ec:PathListBox> 

Я intentionnally вырезать остальную часть кода XAML вниз, так как это не имеет значения.

Precision: Когда я помещаю код, который запускает Command с помощью кнопки, он отлично работает. DataEventTrigger заменяется:

<i:EventTrigger SourceName="button" EventName="Click"> 
         <i:InvokeCommandAction CommandName="DecrementCommand"/> 
        </i:EventTrigger> 

Я предполагаю, что мое событие сильно связаны между собой. Есть ли у вас предложения? Спасибо за помощь, я надеюсь, что мой вопрос ясен.

ответ

0

ТАК, что я сделал - это трюк, чтобы ответить на мои потребности. Вместо того, чтобы использовать DataEventTrigger, я установил DataTrigger.

Использование интерфейса INotifyPropertyChanged, можно изменить значение BOOL в FlipClass, что я пишу, как этот

public class FlipClass 
{ 
private bool myBool = false; 
public void FlipEvent(object sender, EventArgs e) 
{ 
    myBool = true; 
} 

#region INotifyPropertyChanged implementation 


    public event PropertyChangedEventHandler PropertyChanged; 

    public void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 


     PropertyChangedEventHandler h = PropertyChanged; 
     if (h != null) 
     { 
      h(this, e); 
     } 
     else 
     { 
      Console.WriteLine("fail"); 
     } 
    } 

    public void OnPropertyChanged(string propertyName) 
    { 
     OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); 
    } 

    #endregion INotifyPropertyChanged implementation 


    public bool CompareMyBool { 
     get { return myBool;} 
     set 
     { 
      if (value != myBool) 
      { 
       myBool = value; 
       OnPropertyChanged("CompareMyBool"); 
      } 
     } 
    } 
} 

DataContext не меняется. Наконец, мой XML часть, которая содержит триггер будет заменен на этот кусок кода:

<ei:DataTrigger Binding="{Binding CompareMyBool}" Value="True"> 
         <i:InvokeCommandAction CommandName="IncrementCommand"/> 
        </ei:DataTrigger> 

WPF Анимация Предупреждение: 6: Невозможно выполнить действие Существует еще одна последняя вещь, чтобы заботиться. Только с этим кодом свиток бесконечен, и эта проблема выскочит. Должен быть определен триггер остановки.