2013-03-15 124 views
2

我是WPF的新手,请耐心等待。我在我的WPF窗口上有一个ComboBox,ItemSource属性绑定到一个字符串属性列表(国家)和SelectedItem绑定到一个字符串属性(SelectedCountry)。这两个属性都在代码后面 - 我将DataContext设置为“this”(即Window)。WPF默认值(使用样式触发器)绑定

组合框XAML是:

<ComboBox Name="CountryComboBox" 
    VerticalAlignment="Center" 
    Width="200" 
    ItemsSource="{Binding Path=Countries, Mode=OneTime}" 
    SelectedItem="{Binding Path=SelectedCountry, Mode=TwoWay}"> 
</ComboBox> 

我想有一个默认的“ - 请选择 - ”时未选择项目时显示的选项,因此我把下面的XAML中的App.xaml:

<Style TargetType="ComboBox"> 
    <Style.Triggers> 
     <Trigger Property="SelectedItem" Value="{x:Null}"> 
      <Setter Property="IsEditable" Value="true" /> 
      <Setter Property="IsReadOnly" Value="true" /> 
      <Setter Property="Text" Value="- Please Select -" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

当我的窗口第一次显示时,组合框确实有“ - 请选择 - ”文本按预期。然后,当我在组合框中选择一个值时,SelectedCountry被适当填充,但是当我将SelectedCountry属性赋值为“null”时,当我期望它返回到“ - 请选择 - ”。我究竟做错了什么?

谢谢。

+0

尝试添加了当 ComboBox.SelectedValue == NULL触发 – 2013-03-15 18:37:20

回答

4

SelectedItem为空时,不要修改ComboBox并简单地覆盖ComboBox上的TextBlock可能是更好的选择。

只是包装的ComboBox并在Grid一个TextBlock并设置DataTriggerTextBlock来检查SelectedItem为null并且切换其Visibility

例子:

<Grid> 
     <ComboBox x:Name="combo" ItemsSource="{Binding Countries}" SelectedItem="{Binding SelectedItem}" /> 
     <TextBlock x:Name="textblock" Text="- Please Select -" Margin="5,3,0,0" IsHitTestVisible="False"> 
      <TextBlock.Style> 
      <Style TargetType="TextBlock"> 
        <Setter Property="Visibility" Value="Hidden" /> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding SelectedItem,ElementName=combo}" Value="{x:Null}"> 
          <Setter Property="Visibility" Value="Visible" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </TextBlock.Style> 
     </TextBlock> 
    </Grid> 

结果:

enter image description here

enter image description here

enter image description here

1

你需要插入一条记录到具有的空值和名字的名单的国家“ - 请选择 - ”。

另外我想你可以延长ComboBox控件,写自己的,这样你可以不必把记录到国家选择指定列表中的空谷。

两个,但是,它是非常容易,只是一个记录添加到多个国家。