2012-02-13 74 views
0

我想要一個文本框,它將始終在綁定上應用Converter。這種方式我不需要指定轉換器,樣式將已經包含轉換器使用。樣式綁定選項

這是我已經嘗試過:

我有一個綁定查看視圖模型。我使用視圖模型的屬性覆蓋此視圖中文本框的datacontext。它可以讓我用一個通用的風格對我的文本框中

我有以下形式:

<Style x:Key="DateTimeTextBox" TargetType="TextBox"> 
    <Setter Property="ToolTipService.ShowDuration" Value ="40000"/> 
    <Setter Property="Text" Value ="{Binding Path=.,Converter={StaticResource myConverter},UpdateSourceTrigger=PropertyChanged}"/> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="true"> 
     <Setter Property="ToolTip" Value="Unknown date format"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

在我想有綁定在porperty DateTimeValueToBind而不是整個視圖下面的文本框的觀點型號:

<TextBox Style="{StaticResource DateTimeTextBox}" DataContext="{Binding DateTimeValueToBind}"/> 

酒店DateTimeValueToBind在文本框不過它不再束縛正常顯示(當我修改它,視圖模型屬性沒有改變)

我試圖在綁定選項中添加Mode = TwoWay,但它沒有改變任何東西。

可以解釋爲什麼DateTimeValueToBind屬性在此上下文中不再綁定?

預先感謝

+0

你是什麼意思與「不再限制; viewmodel屬性沒有改變」?如果您修改了DataContext,那麼CLR屬性需要提出,否則UI將保存對舊視圖模型的引用。如果您正確地提出DataTimeValueToBind,它應該自動重新顯示Text屬性。通過將PresentationTraceSources.TraceLevel = High添加到綁定標記中,您可以更好地瞭解綁定的工作方式。 – dowhilefor 2012-02-13 13:14:20

+0

@dowhilefor:我不修改datacontext實例,我只是想將綁定委託給文本框,以便在我的樣式(數據轉換器)中爲此上下文使用一些通用綁定選項。我可以簡單地綁定在Text屬性上,但在這種情況下,我總是需要指定轉換器以及我想將轉換過程放入樣式中。 – Guillaume 2012-02-13 13:26:41

回答

0

離開DataContext,綁定到TextDateTimeValueToBind(移離DataContext結合到Text)。你不應該在風格中設置這種綁定。如果路徑爲.,則您的不能綁定TwoWay。 (而且你還保存了什麼?你甚至還有更多的寫作,因爲"DataContext""Text"長。)

+0

我明白,通常做什麼,但在這種情況下,我不知道財產的名稱是什麼。在我的應用程序中,我有許多日期來顯示(不同的屬性名稱)我想要應用一個通用綁定,強制使用特定的轉換器,並始終在綁定時指定它。我怎樣才能做到這一點? – Guillaume 2012-02-13 13:22:32

+0

@gbr:您可以在知道綁定到的內容後以編程方式創建綁定。 – 2012-02-13 13:24:33

+0

在我以前的評論我應該寫「我想申請一個通用的綁定,將強制使用特定的轉換器和**不**總是綁定時指定它」。爲了讓事情變得簡短,我想「風格化」我的綁定選項 – Guillaume 2012-02-13 13:31:36