2011-07-11 33 views
0

正如標題所說,我有一個隱藏邊框,裏面有一些控件,我想在選擇組合框中的特定項目時顯示它。設置爲當組合框中的項目被選中時可見

我嘗試以下

<ComboBox Name="cmbRequiredRule" SelectedValuePath="Content"                          
      SelectedValue="{Binding Path=ClientValidation.NarrativeRequiredRule}"> 
    <ComboBoxItem>All</ComboBoxItem>       
    <ComboBoxItem>Matching</ComboBoxItem> 
</ComboBox> 

<Border Visibility="Collapsed"> 
    <Border.Resources> 
     <Style TargetType="{x:Type Border}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=ClientValidation.NarrativeRequiredRule}" Value="Matching"> 
        <Setter Property="Visibility" Value="Visible" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Border.Resources> 
.... 
</Border> 

與這個屬性的視圖模型:

public string NarrativeRequiredRule 
    { 
     get... 
     set... 
    } 

但是觸發似乎並不奏效

回答

1

嘗試在你的樣式設置器中設置Visibility=Collapsed,而不是邊界標籤的一部分。過去,當數值指定爲標記的一部分時,DataTrigger不適用。

<Border> 
     <Border.Resources> 
      <Style TargetType="{x:Type Border}"> 
       <Setter Property="Visibility" Value="Collapsed" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=Test}" Value="Matching"> 
         <Setter Property="Visibility" Value="Visible" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Border.Resources> 
     ... 
    </Border> 
+0

這是我之前嘗試過的綁定在我的問題。兩者都有相同的問題。 – Marcom

+0

@Marcom我改變了我的答案。我只記得過去用這種方式定義樣式時遇到的問題。 – Rachel

+0

是的,它的工作!謝謝。這是一個討厭的錯誤:/ – Marcom

0

可能是綁定的問題。在你的例子如下:

<DataTrigger Binding="{Binding Path=ClientValidation.NarrativeRequiredRule}" Value="Matching"> 

其中是ClientValidation位於?因爲如果整個View的DataContext綁定到VM,則需要包含這些層次結構。檢查你的輸出日誌,如果綁定失敗,它應該會拋出一些錯誤

+0

我對物業的斷點,它到達該點+我沒有看到任何輸出綁定錯誤。 – Marcom

+1

多數民衆贊成在良好。在你的ViewModel中,你是否實現了INotifyPropertyChanged?因爲如果你不這樣做,那麼WPF不會知道你的財產是否已經改變 –

+0

它確實,在其他綁定和工作中使用了相同的屬性,所以這就是爲什麼我懷疑觸發器 – Marcom

1

對於樣式,本地賦值爲precedence。因此,你需要有

<Setter Property="Visibility" Value="Collapsed" /> 

Style爲@Rachel指出。 另外我嘗試使用虛擬轉換器調試綁定,並發現值原來是System.Windows.Controls.ComboBoxItem: Matching而不是Matching

因此最終的風格是:

  <Style TargetType="{x:Type Border}"> 
       <Setter Property="Visibility" Value="Collapsed" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=ClientValidation.NarrativeRequiredRule}" Value="System.Windows.Controls.ComboBoxItem: Matching"> 
         <Setter Property="Visibility" Value="Visible" /> 
        </DataTrigger> 
       </Style.Triggers>      
      </Style> 
相關問題