2014-11-25 3 views
0

사용자가 TextBox에 내용을 입력하고 Enter 단추를 누르십시오. Enter-button을 누르면 AddFieldCommand이 호출됩니다. XAML에서 어떻게 할 수 있습니까?사용 방법 EventToCommand - XAML 오류

내 코드에서 "속성 '텍스트'가 두 번 이상 설정되었습니다."라는 경고 메시지가 나타납니다.

캔버스의 어떤 개체가 업데이트되고 있는지 알 필요가 있으므로 TextBox의 콘텐츠를 내 모델에 추가 할 수 있습니다. 이것이 내가 EventToCommand을 사용하는 이유입니다.

<TextBox x:Name="txtFields" Text="{Binding FieldsTextProperty, UpdateSourceTrigger=PropertyChanged}" Height="23" TextWrapping="NoWrap" Background="#FFCBEECD" AcceptsReturn="False" > 
    <TextBox.InputBindings> 
     <KeyBinding Key="Enter" > 
     </KeyBinding> 
    </TextBox.InputBindings> 
    <i:EventTrigger EventName="AddField"> 
     <cmd:EventToCommand Command="{Binding DataContext.AddFieldCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" PassEventArgsToCommand="True"/> 
    </i:EventTrigger> 
</TextBox> 

아무도 도와 줄 수 있습니까? 당신은 당신이 버튼을 바인더 제본 명령을 실행할 입력을 클릭하면

답변

0

, 모두는 내용된다. 텍스트 상자의 경우 Text 속성을 설정합니다. 이것은 다음과 같은 것을 허용하는 것입니다 :

<TextBox>Foo bar</TextBox> 

따라서 XAML 요소 내에 콘텐츠를 배치 할 수 있습니다. 이것은이하는 것과 같습니다

<TextBox Text="Foo bar" /> 

이제, 당신이 당신의 XAML 코드를 보면, 당신은 당신이 TextBox 요소 내부에 두 개의 요소가 있음을 알 수 있습니다 : TextBox.InputBindingsi:EventTrigger을. 첫 번째를 설명하기 위해 자식 요소를 사용하여 요소의 속성 값을 지정하는 또 다른 방법이 있다는 것을 알아야합니다.

<TextBox> 
    <TextBox.Text>Foo bar</TextBox.Text> 
</TextBox> 

TextBox의 모든 속성에 대한 작업이이 동등 위의 예제를합니다. 이제 InputBindingsTextBox의 속성이므로 하위 요소로 설정하면 속성을 올바르게 설정하고 요소의 콘텐츠 값에도 영향을 미치지 않습니다 (따라서 Text은 존재 여부에 따라 설정되지 않습니다). 그러나 i:EventTrigger은 TextBox의 속성이 아니므로 TextBox의 콘텐츠를 표시하므로 표시되는 오류 메시지가 표시됩니다.

상호 작용 이벤트 트리거를 사용하려면 첨부 된 속성 i:Interaction.Triggers에 입력해야합니다. 첨부 된 속성으로 위와 같은 자식 요소로 설정할 수 있습니다. 따라서 코드는 다음과 같아야합니다.

<TextBox …> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="AddField"> 
      <cmd:EventToCommand … /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</TextBox> 
+0

그러나 사용자가 Enter-button을 눌렀을 때 어떻게'EventToCommand'를 트리거 할 수 있습니까? 그리고 귀하의 연습에 대해 많은 감사드립니다! – MikaelKP

+0

설정에 따라,'AddField' 이벤트가 발생할 때 명령이 실행됩니다. ['KeyPress'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx) 이벤트를 듣고 (그리고 키를 눌렀는지 확인하십시오. Enter 키). 'TextBox'를 서브 타입 화하고 EventTrigger를 사용할 수있는'EnterKeyPressed' 이벤트를 추가 할 수 있습니다. – poke

0

당신은 당신의 명령을 실행하고 focus.So을 유지 할 수 있도록 버튼의 IsDefault = 사실 속성을 사용하는 ICommand의 인터페이스를 사용할 수 있습니다. 요소 내부에 배치됩니다

XAML에서
<TextBox x:Name="txtFields" Text="{Binding FieldsTextProperty,UpdateSourceTrigger=PropertyChanged}" Height="23" TextWrapping="NoWrap" Background="#FFCBEECD" AcceptsReturn="False" />        

     <Button Name="btnEnter" IsDefault="True" Command="{Binding DataContext.AddFieldCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" /> 
+0

버튼이없는 방법을 알고 계십니까? 나는 사용자가 'Enter'를 누를 때마다'EventToCommand'를 트리거하고 싶습니다. – MikaelKP