2009-12-29 47 views
0

如果我的ViewModel中的DependencyProperty設置爲Visiblity.Hidden,我有一個TextBlock(實際上是一大堆TextBlocks),我將Text設置爲「」。我通過一個轉換器做法如下:WPF - 轉換器隱藏對DependencyProperty的依賴

<TextBlock Margin="0,0,5,0"> 
    <TextBlock.Text> 
    <Binding Converter="{StaticResource GetVisibilityOfColumnTitles}" 
      Path="Name" /> 
    </TextBlock.Text> 
</TextBlock> 

轉換器看起來是這樣的:

public object Convert(object value, Type targetType, 
         object parameter,System.Globalization.CultureInfo culture) 
{ 
    if (MainMediator.Instance.VisibilityOfWorkItemColumnTitles 
     == Visibility.Visible) 
     return value; 
    else 
     return "";  
} 

我承認這是要做到這一點有點令人費解的方式,但我有我的理由(DataContext的併發症和TextBlock的間距)

我遇到的問題是,當VisibilityOfWorkItemColumnTitles改變時,即使它是一個依賴屬性,TextBlock.Text也沒有意識到存在依賴關係(因爲它在轉換器中使用)。

有沒有在代碼背後(最好在轉換器)說,這個TextBlock想要更新此VisibilityOfWorkItemColumnTitles更改此綁定?

回答

2

由於您的轉換器依賴於TextBox的Text屬性和MainMediator類的VisibilityOfWorkItemColumnTitles屬性,因此您可能需要使用MultiBinding並將兩個屬性都包含回XAML中。

<TextBlock Margin="0,0,5,0"> 
    <TextBlock.Text> 
     <MultiBinding Converter="{StaticResource GetVisibilityOfColumnTitles}"> 
      <Binding Path="Name" /> 
      <Binding Path="VisibilityOfWorkItemColumnTitles" Source="{x:Static my:MainMediator.Instance}" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

(我用「我」作爲該代碼示例中你MainMediator類XML命名空間。)

那麼你的轉換器更改爲IMultiValueConverter,並參考值[0]文本值爲1爲「可見性」屬性。現在綁定將知道是否有任何屬性發生變化,並適當地關閉轉換器。

+0

這是一個好主意。問題是VisibilityOfWorkItemColumnTitles在我的MainMediator類(ViewModel)中,並且名稱不是(它是列表框中的一個項目(實際上是子項目))。我怎樣才能到達中介而不會搞亂datacontext(這是我提到的DataContext併發症)。 – Vaccano 2009-12-29 22:47:30

+0

啊,這是什麼來源?我會試一試。謝謝! – Vaccano 2009-12-29 22:56:48

+0

甜蜜的答案!萬分感謝! – Vaccano 2009-12-29 23:05:15