2014-02-13 128 views
0

我有一個包含2個ComboBoxes和2個TextBox的UserControl。我在MainWindow中有兩個UserControl實例。在UserControl實例中設置ComboBox屬性

UserControl的第二個實例的可見性綁定到放置在MainWindow中的CheckBox - 根據CheckBox.IsChecked屬性,UserControl變爲隱藏/可見。

CheckBox本身的IsChecked和IsEnabled屬性綁定到UserControl的第一個實例中的第一個ComboBox的SelectedItem屬性 - 例如:如果值爲null,它們將爲false。我使用的是MVVM,所以這個綁定是在ViewModel部分定義的。

我的問題是 - 有沒有辦法通過MainWindow中的XAML訪問UserControl的組合框之一的SelectedIndex屬性,所以當CheckBox是UnChecked時,除了UserControl的第二個實例將轉向隱藏起來,第二個實例中組合框的SelectedIndex將變爲0?

UserControl的XAML:

<ComboBox x:Name="comboField" ItemsSource="{Binding Fields}" 
      DisplayMemberPath="Key" 
      SelectedItem="{Binding FieldComboSelectedItem, Mode=TwoWay}"/> 
<TextBox x:Name="tbFirstValue"/> 
<ComboBox x:Name="comboQueryType" 
      SelectedItem="{Binding QueryTypeComboSelectedItem, Mode=TwoWay}"/> 
<TextBox x:Name="tbSecondValue"/> 

的2個實例,並在主窗口XAML的複選框:

<local:FilterUC x:Name="firstFilter"/>  
<local:FilterUC x:Name="secondFilter"> 
    <local:FilterUC.Style> 
     <Style TargetType="{x:Type local:FilterUC}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsChecked, 
           ElementName=cbTwoFields}" Value="False"> 
        <Setter Property="Visibility" Value="Hidden"/> 
           <!--This is what I want to achieve:--> 
        <!--<Setter ElementName="comboField" 
           Property="SelectedIndex" Value="0" />--> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </local:FilterUC.Style> 
</local:FilterUC> 
<CheckBox x:Name="cbTwoFields" Content="Add filter" 
      IsEnabled="{Binding ElementName=firstFilter, 
           Path=DataContext.AddFilterEnable}" 
      IsChecked="{Binding ElementName=firstFilter, 
           Path=DataContext.AddFilterChecked}"/> 

回答

1

你總是可以只需添加一個DependencyProperty揭露ComboBox.SelectedIndex屬性:

public static DependencyProperty SelectedIndexProperty = DependencyProperty.Register(
    "SelectedIndex", typeof(int), typeof(FilterUC), new PropertyMetadata(0)); 

public int SelectedIndex 
{ 
    get { return (int)GetValue(SelectedIndexProperty); } 
    set { SetValue(SelectedIndexProperty, value); } 
} 

你沒有說哪個ComboBox你想重置,所以我就用這個來證明你應該如何使用RelativeSource BindingComboBox.SelectedIndex屬性綁定到新的DependencyProperty

<ComboBox x:Name="comboQueryType" SelectedIndex="{Binding SelectedIndex, 
    RelativeSource={RelativeSource AncestorType={x:Type local:FilterUC}}}" 
    SelectedItem="{Binding QueryTypeComboSelectedItem, Mode=TwoWay}" /> 

那麼你應該能夠訪問它的DataTrigger。試試這個:

<Style TargetType="{x:Type local:FilterUC}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding IsChecked, 
         ElementName=cbTwoFields}" Value="False"> 
      <Setter Property="Visibility" Value="Hidden"/> 
      <Setter Property="SelectedIndex" Value="0" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
+0

非常感謝您的快速回答。 我已經測試過提出的解決方案,它應該已經工作。看來 '' 以某種方式被忽略。 (儘管第一個行爲與預期相同)。 我試圖找到解決方法,但沒有成功。我會感謝您的進一步幫助或一個小小的演示。 非常感謝。 – user3306382

相關問題