1

我一直在尝试找到解决方案,但无法在线找到相关答案。

我有一堆需要用数据填充的文本框,例如在我的案例地址中。我有一个绑定到枚举的组合框,并有一个可供选择的值列表

家庭、办公室、MainOffice、实验室。等等当我在组合框上进行选择时,我需要在下面的文本框中填充它的地址。我可以从对象 X 中获取家庭地址,从对象 Y 中获取办公室地址,从 Z 中获取 MainOffice。如何使用组合框选择进行此条件数据绑定。请指教。

这些是我可以选择的选项

public enum MailToOptions
{
    Home,
    Office,
    CorporateOffice,
    Laboratory,
}



    <!-- Row 1 -->
    <Label Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="5" Content="Mail To:" />
    <ComboBox Grid.Column="0" Grid.Row="1"  Grid.ColumnSpan="5" Name="MailToComboBox" 

     ItemsSource="{Binding Source={StaticResource odp}}"    
     SelectionChanged="HandleMailToSelectionChangedEvent" >

    </ComboBox>
    <!-- Agency ID -->


    <!-- Name -->
    <Label Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="5" Content="Name" />
    <TextBox Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="5">
        <TextBox.Text>
            <Binding Path="Order.Agency.PartyFullName" Mode="TwoWay" />
        </TextBox.Text>
    </TextBox>

    <!-- Row 2 -->

    <!-- Address Line 1 -->
    <Label Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="5" Content="Address 1" />
    <TextBox Grid.Row="7" Grid.Column="0" Grid.ColumnSpan="5">
        <TextBox.Text>
            <Binding Path="Order.Agency.AddressLine1" Mode="TwoWay"     />
        </TextBox.Text>
    </TextBox>
4

1 回答 1

10

最好的方法是在您的ComboBox对象中制作项目,并将您的文本字段绑定到ComboBox.SelectedItem

例如,

<ComboBox x:Name="AddressList" ItemsSource="{Binding Addresses}" DisplayMemberPath="Name" />

<TextBox Text="{Binding SelectedItem.Street, ElementName=AddressList}" ... />
<TextBox Text="{Binding SelectedItem.City, ElementName=AddressList}" ... />
<TextBox Text="{Binding SelectedItem.State, ElementName=AddressList}" ... />
<TextBox Text="{Binding SelectedItem.ZipCode, ElementName=AddressList}" ... />

一种更简洁的方法是设置DataContext包含 TextBoxes 的任何面板的

<ComboBox x:Name="AddressList" ItemsSource="{Binding Addresses}" DisplayMemberPath="Name" />

<Grid DataContext="{Binding SelectedItem, ElementName=AddressList}">
    <TextBox Text="{Binding Street}" ... />
    <TextBox Text="{Binding City}" ... />
    <TextBox Text="{Binding State}" ... />
    <TextBox Text="{Binding ZipCode}" ... />
</Grid>

您可以将 ComboBox 绑定到类似的东西ObservableCollection<Address>,或者ItemsSource在后面的代码中手动设置。

我建议绑定,但是在它后面的代码中手动设置它看起来像这样:

var addresses = new List<Addresses>();
addresses.Add(new Address { Name = "Home", Street = "1234 Some Road", ... });
addresses.Add(new Address { Name = "Office", Street = "1234 Main Street", ... });
...
AddressList.ItemsSource = addresses;
于 2012-06-25T16:34:26.300 回答