2011-07-19 56 views
0

我正在使用MVVM/WPF並試圖做一些看似簡單的事情,但無法找到乾淨的解決方案。在同一時間訪問DataContext和代碼中的屬性

我要做到以下幾點:

當模型中的一個屬性更改(WPF文本框的文本會在這種情況下進行更改),使用方法上與綁定的屬性的UI執行其他操作。

當前我在工具提示上使用多重綁定(獲取文本框datacontext +綁定路徑),但這有點破解。

<TextBox x:Name="textBox" Text="{Binding Model.MyProperty}"> 
<TextBox.ToolTip> 
     <MultiBinding Converter="{StaticResource brNewMultiConverter}"> 
       <!-- This to trigger the converter in all required cases. 
        Without it, i cant get the event to fire when filling 
        the model initially 
       --> 
       <Binding ElementName="textBox" Path="Text" /> 
       <!-- This has the properties i need, but wont fire without 
        the binding above --> 
       <Binding ElementName="textBox" /> 
     </MultiBinding> 
</TextBox.ToolTip> 
</TextBox> 

我想提出一些可重複使用的,並可能是針對不同的控制,所以我不是隻用TextChanged事件。

如果任何人都可以指出我正確的方向,它將不勝感激。

+0

「使用方法上與綁定的屬性的UI執行其他操作。」如果這是特定的,就有可能爲實現這一目的的方式提供建議。 – Will

回答

0

它看起來像你試圖讓工具提示有文本框的內容,如果是的話,爲什麼不這樣做呢?

<TextBox Text="{Binding Model.MyProperty}" ToolTip="{Binding Model.MyProperty}"/> 

如果這不是你想要的,但要根據文本框的值的提示修改,然後做你的視圖模型如

public class MyViewModel 
{ 
    string _MyProperty; 
    public string MyProperty 
    { 
    get { return _MyProperty;} 
    set 
    { 
     _MyProperty = value; 
     OnPropertyChanged("MyProperty"); 
     OnPropertyChanged("MyToolTipProperty"); //force WPF to get the value of MyToolTipProperty 
    } 
    } 

    public string MyToolTipProperty 
    { 
    get 
    { 
     //return what you want 
    } 

    } 
} 

,然後在您的標記:

<TextBox Text="{Binding Model.MyProperty}" ToolTip="{Binding Model.MyToolTipProperty}"/> 
+0

非常感謝Jose(和@CodeWarrior),這兩個都是令人滿意的答案,可以阻止很多小時的流失。我試圖這樣做的原因是在CSLA MVVM中使用驗證。使用DataAnnotations時驗證通過的很好,但在使用Csla驗證規則時沒有驗證。我剛剛查看了最新版本,驗證已更新,現在無需任何額外工作即可運行(http://www.lhotka.net/weblog/CSLA4BusinessRulesSubsystem.aspx)。 – HockeyJ

1

好的,就你的多重綁定而言,你想在那裏完成什麼?我不知道你的轉換器應該做什麼,但是不能用IValueConverter實現類來完成嗎?我假設不,看起來你正在將文本框傳遞給轉換器。

只要有一個方法在模型屬性更新時做了幾件事情,您可以讓viewmodel訂閱模型類上的事件。只需聲明對象WithEvents(VB.NET)併爲On [PropertyName] Changed添加事件處理程序。

實現MVVM時,我傾向於將代碼隱藏視爲二級公民。如果可以,我盡我所能將所有邏輯推送到ViewModel或View。我幾乎完全停止了使用轉換器,因爲許多邏輯可以在ViewModels中複製,如果它是我想要重用的東西,我通常只需要一個幫助器類來獲取傳遞給它的任何東西,把它傳回去。我從來沒有真正與IValueConverter有過這麼好的關係......

除此之外,目前還不清楚你想要做什麼。我們能否得到更多的澄清?

相關問題