2015-02-06 79 views
0

我想知道當propertychanged被調用時是否有可能更新另一個UI元素。當propertychanged被更新時更新另一個UI元素Xaml

下面是一個例子:

public string TestString 
{ 
    get { return testString; } 
    set 
    { 
     testString = value; 
     OnPropertyChanged("TestString"); 
    } 
} 

public TestClass TestClassInstance { get; set; } 

假設我的測試類有一個叫做更新方法。如何設置它以便在Xaml中的T​​estString屬性發生更改時調用Update?我知道我總是可以將該方法附加到事件處理程序上,但我想知道是否可以在Xaml中執行此操作。也許使用行爲或類似的東西。 你能告訴我這是否可能,如果有的話,你能幫助我走向正確的方向嗎?

+1

您可以使用元素綁定。參考textbox的例子textbloack。 2015-02-06 17:30:37

+0

@Ganesh是的我知道你可以將另一個UI元素的元素鏈接到另一個元素。我的意思是我想在TextBox更改時調用TestClassInstance中的更新方法。我怎麼做? – CodingMadeEasy 2015-02-06 18:42:41

+0

只需在代碼中更新即可。這不是魔術,在TestString改變時,xaml中的任何內容都不應該「知道」TestClassInstance應該調用Update方法。 – Will 2015-02-06 19:13:29

回答

0

這聽起來像你正在尋找Behaviours

<!-- This collection element might exist if you have already added other behaviors. --> 
<i:Interaction.Triggers> 
    <i:EventTrigger SourceName="textBox" EventName="TextChanged"> 
     <ic:CallMethodAction MethodName="Update" TargetObject="{Binding TestClassInstance}"> 
     </ic:CallMethodAction> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 

<Textbox x:Name="textBox" Content="{Binding TestString, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 

但我不知道你是否能趕上通過此方法從代碼更改。如果你的更新方法是一個命令,你應該使用InvokeActionCommand

<cmd:InvokeCommandAction Command="{Binding TestClassInstance.Update}"/> 

但是,您爲什麼要把它放入XAML?它是一種非常特定於某個視圖或應用程序類型的行爲嗎?

+0

感謝您的回答! :)。它適用於大多數情況,但是如何讓它爲用戶控制工作?假設我有一個包含列表框的用戶控件,並且我想根據用戶控件中正在更改的選擇來調用一個命令?我如何在主視圖中獲取這些信息? 例如: ... – CodingMadeEasy 2015-02-09 15:44:09

+0

Nvm。我只是將一個SelectionChanged EventHandler添加到我的用戶控件中,並在我的列表框選擇已更改時調用它。 – CodingMadeEasy 2015-02-09 16:06:16