2014-11-20 37 views
0

我的問題命令如下:WPF:如何執行時,上的UIElement屬性已經改變

我有一個文本編輯在我看來,它有一個屬性IsKeyboardFocusWithin,它告訴我,如果鍵盤光標位於TextEdit中供用戶輸入。

在我的視圖模型中,我有一個命令,我希望在用戶完成完整輸入並點擊屏幕上的其他位置時執行該命令。即 - 每當IsKeyboardFocusWithin設置爲false。

我就在想,我能想到的唯一辦法知道什麼時候IsKeyboardFocusWithin改變的是在文本編輯的風格使用觸發器:

<MultiTrigger> 
    <MultiTrigger.Conditions> 
     <Condition Property="IsKeyboardFocusWithin" Value="False" /> 
     <Condition Property="IsReadOnly" Value="False" /> 
    </MultiTrigger.Conditions> 

    ??? 
</MultiTrigger> 

但我不知道在什麼地方命令,並有強烈的懷疑,我不能。

有誰知道這是可能的嗎? 如果不是,你可以推薦我做什麼?

非常感謝!

PP:輸入的文本被綁定到一個字符串屬性,我的命令會根據它的內容做不同的事情。

Text="{Binding Path=ChatSessionName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 

回答

0

我找到了答案我的queston(很瑣碎,但我沒有看到它在一天的工作後)。

正如我所懷疑的,觸發器根本就不是這樣做的!

原來,我的TextEdit支持事件IsKeyboardFocusWithinChanged,所以我需要做的是創建一個處理程序,從代碼隱藏中調用我的命令。

IsKeyboardFocusWithinChanged="TextEdit_IsKeyboardFocusWithinChanged" 

private void TextEdit_IsKeyboardFocusWithinChanged(object sender, DependencyPropertyChangedEventArgs e) 
{ 
    var textEdit = sender as TextEdit; 
    var viewModel = DataContext as MyViewModel; 

    if (textEdit != null) 
    { 
     if (!textEdit.IsKeyboardFocusWithin) 
     { 
      viewModel.MyCommandExecuted(null); 
     } 
    } 
} 
+0

我考慮的另一個解決方案是將** IsKeyboardFocusWithin **綁定到ViewModel上的一個屬性,並從setter中調用該命令。 這看起來像一個更類似MVVM的解決方案,因爲它避免了代碼隱藏,但我不喜歡爲了可以調用該命令而擁有整個屬性的想法。 這就是說,我很樂意就此進行討論。 – wyaneva 2014-11-21 13:44:57

相關問題