.net 将复选框选定值文本框绑定到与“绑定到属性”下拉列表不同的属性

.net 将复选框选定值文本框绑定到与“绑定到属性”下拉列表不同的属性,.net,wpf,xaml,binding,combobox,.net,Wpf,Xaml,Binding,Combobox,我的组合框绑定到3个属性(IsVisited、Address和City): 我想创建一个wpf组合框,下拉框包含两列 isvisted(复选框) 城市(字符串) 组合框的选定文本框部分应仅显示“地址”。有人知道如何做到这一点吗?一个有点老套的解决方案是检查您的DataTemplate是否在ComboBoxItem中,并在不在时隐藏不需要的值: <ComboBox.ItemTemplate> <DataTemplate

我的组合框绑定到3个属性(IsVisited、Address和City):


我想创建一个wpf组合框,下拉框包含两列

  • isvisted(复选框)
  • 城市(字符串)

  • 组合框的选定文本框部分应仅显示“地址”。有人知道如何做到这一点吗?

    一个有点老套的解决方案是检查您的
    DataTemplate
    是否在
    ComboBoxItem
    中,并在不在时隐藏不需要的值:

                 <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <CheckBox IsChecked="{Binding IsVisited}" Width="150" x:Name="chk"/>
                            <TextBlock Text="{Binding Address}" Width="100"/>
                            <TextBlock Text="{Binding City}" Width="100" x:Name="City"/>
                        </StackPanel>
                        <DataTemplate.Triggers>
                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBoxItem}}}" Value="{x:Null}">
                                <Setter TargetName="City" Property="Visibility" Value="Collapsed"/>
                                <Setter TargetName="chk" Property="Visibility" Value="Collapsed"/>
                            </DataTrigger>
                        </DataTemplate.Triggers>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
    

    我重现了你的问题,完成了你的任务

    这是最初的观点

    然后在选择了Kegalla之后

    我想这就是你需要的

  • 为ComboBoxItem定义一个视图模型。(在我的例子中,我创建了一个名为
    mycomboxItem
    的类,并包含属性,即
    hasvistered、Address、City、TextBoxValue

  • 在主视图模型中,定义一个
    属性
    来绑定组合框
    项源
    (我定义了一个名为
    ComboBoxItems
    )的属性)和另一个属性来绑定组合框的
    SelectedComboxItem

  • 在选择更改方法中,执行您的逻辑来设置texbox

  • 这是我的
    XAML

    <Window x:Class="ComboboxSelectedItemChange.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        xmlns:vm="clr-namespace:ComboboxSelectedItemChange.ViewModels"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
    
        <Grid.DataContext>
            <vm:MainViewModel />
        </Grid.DataContext>
    
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="40" />
            <RowDefinition Height="30" />
        </Grid.RowDefinitions>
    
        <Label Grid.Column="0" Grid.Row="0" Content="Combo box test" />
        <ComboBox Grid.Column="1" Grid.Row="1"
                  ItemsSource="{Binding ComboBoxItems}"
                  SelectedItem="{Binding SelectedComboBoxItem}">
    
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <CheckBox IsChecked="{Binding HasVisited}" Width="30" />
                        <TextBlock Text="{Binding TextBoxValue}" Width="100" />
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
    
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectionChanged">
                    <i:InvokeCommandAction Command="{Binding ChangeSelectionCommand}" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </ComboBox>
    </Grid>
    
    这是MyComboxItemViewModel的

    公共类MyComboxItemViewModel:ViewModelBase { #区域声明 二等兵布尔已经到访; 私有字符串地址; 私人城市; 私有字符串textBoxValue; #端区 #区域属性 /// ///获取或设置一个值,该值指示此实例是否已访问。 /// /// ///如果此实例已访问,则为true;否则为false。 /// 公共图书馆 { 得到 { 回访; } 设置 { hasVisited=价值; NotifyPropertyChanged(“HasVisited”); } } /// ///获取或设置地址。 /// ///地址。 公共字符串地址 { 得到 { 回信地址; } 设置 { 地址=值; NotifyPropertyChanged(“地址”); } } /// ///获取或设置城市。 /// ///城市。 公共字符串城市 { 得到 { 回归城市; } 设置 { 城市=价值; 通知财产变更(“城市”); } } /// ///获取或设置文本框值。 /// ///文本框的值。 公共字符串TextBoxValue { 得到 { 返回textBoxValue; } 设置 { textBoxValue=值; NotifyPropertyChanged(“TextBoxValue”); } } #端区 }
    <Window x:Class="ComboboxSelectedItemChange.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        xmlns:vm="clr-namespace:ComboboxSelectedItemChange.ViewModels"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
    
        <Grid.DataContext>
            <vm:MainViewModel />
        </Grid.DataContext>
    
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="40" />
            <RowDefinition Height="30" />
        </Grid.RowDefinitions>
    
        <Label Grid.Column="0" Grid.Row="0" Content="Combo box test" />
        <ComboBox Grid.Column="1" Grid.Row="1"
                  ItemsSource="{Binding ComboBoxItems}"
                  SelectedItem="{Binding SelectedComboBoxItem}">
    
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <CheckBox IsChecked="{Binding HasVisited}" Width="30" />
                        <TextBlock Text="{Binding TextBoxValue}" Width="100" />
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
    
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectionChanged">
                    <i:InvokeCommandAction Command="{Binding ChangeSelectionCommand}" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </ComboBox>
    </Grid>