2017-07-05 154 views
0

我有數據模板和5行的列表。所以在每一行中,都有兩個組合框「有」和「不」。因此,當窗口加載時,ListBox行內的文本框在Datatemplate內設置爲readonly =「True」。但是當我從單個行中的組合框項目中選擇「否」時,則對於列表中的每個單獨的行,文本框應該變爲可編輯的,並且isReadonly =「False」。我的列表框項目是5.如何做到這一點?textbox isReadonly用組合框更改selecteditem

//xaml 
<ListBox x:Name="wbListDataTemplate" 
            ItemsSource="{Binding wbVisibleItems}"   
            DataContext="{DynamicResource wbItem}" 
            Background="{x:Null}" 
           SelectedItem="{Binding wbSelectedItem, Mode=TwoWay, UpdateSourceTrigger=Default}" 
           IsSynchronizedWithCurrentItem="True" Canvas.Top="33" Height="152" Width="628" LostFocus="wbListDataTemplate_LostFocus" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Initialized="wbListDataTemplate_Initialized_1"> 

          <ListBox.ItemTemplate>         
           <DataTemplate> 
            <Grid Grid.ColumnSpan="1" Grid.RowSpan="1" Height="39" Width="642" Margin="0,0,0,-14" > 
             <Grid x:Name="Grid1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="697" Margin="10,0,0,0" Height="54" > 

              <Label Margin="0,3,0,5" Grid.Row="0" Grid.Column="0" Grid.RowSpan="2"/> 


              <ComboBox x:Name="wbselect" Margin="0,0,60,1" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0" Loaded="wbselect_Loaded" > 
               <ComboBoxItem x:Name="wbyes" IsSelected="True" Content="yes"></ComboBoxItem> 
               <ComboBoxItem x:Name="wbno" Content="no"></ComboBoxItem> 
              </ComboBox>           
              <TextBox x:Name="wbdepth" Text="" MaxLength="20" Margin="217,0,230,1" LostKeyboardFocus="wbdepth_LostKeyboardFocus" Grid.ColumnSpan="2" IsReadOnly="True"/>  

             </Grid> 
            </Grid> 
           </DataTemplate> 
          </ListBox.ItemTemplate>       
         </ListBox> 
+0

直= yes和錐形=不是? –

+0

@MightyBadaboom請立即檢查編輯 –

+0

看看我的答案 –

回答

0

雖然我會建議不要使用組合框用於此目的(和喜歡使用複選框或切換按鈕),您可以在組合框的文本框樣式的SelectedIndex屬性使用DataTrigger:

<DataTemplate> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <ComboBox x:Name="cb" SelectedIndex="0"> 
      <ComboBoxItem>Yes</ComboBoxItem> 
      <ComboBoxItem>No</ComboBoxItem> 
     </ComboBox> 
     <TextBox Grid.Column="1"> 
      <TextBox.Style> 
       <Style TargetType="TextBox"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding SelectedIndex, ElementName=cb}" 
            Value="0"> 
          <Setter Property="IsReadOnly" Value="True"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </TextBox.Style> 
     </TextBox> 
    </Grid> 
</DataTemplate> 
0

我會使用一個IValueConverter看起來像這樣。

public class ReadonlyConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var content = ((ComboBoxItem)value).Content; 
     var isEnabled = content.Equals("yes"); 

     return isEnabled; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

而在XAML中,你必須改變

IsReadOnly="True" 

IsReadOnly="{Binding ElementName=wbselect, Path=SelectedItem, Converter={StaticResource ReadOnlyConverter}}" 

而且你必須引用添加到您的轉換器

<Window xmlns:converter="clr-namespace:WpfApplication1.Converters"> 
    <Window.Resources> 
     <ResourceDictionary> 
      <converter:ReadonlyConverter x:Key="ReadOnlyConverter"/> 
     </ResourceDictionary> 
    </Window.Resources>