【问题标题】:Binding from multi object in to one value in XAML从多对象绑定到 XAML 中的一个值
【发布时间】:2014-02-10 08:43:58
【问题描述】:

我有一个 ListView,它有一个像这样的 DataTemplate:

<DataTemplate x:Key="FilterDataTemplate">
<StackPanel Orientation="Horizontal" Background="White" Height="50" HorizontalAlignment="Left">
    <ComboBox x:Name="TermsItemComboBox" Width="160"
        ItemsSource="{Binding ItemList}" Tag="{Binding}"
        DisplayMemberPath="Key" SelectionChanged="AddTermsItem_SelectionChanged"
        Background="#FFD1D1D1" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
    <TextBox x:Name="TermsInputTxt1" Text="{Binding FilterText, Mode=TwoWay}"
        BorderBrush="#FF727272" Background="#FFD1D1D1" HorizontalAlignment="Left"
        Width="200" FontSize="16" VerticalAlignment="Center"
        Visibility="{Binding IsTxtForm, Converter={StaticResource BooleanToVisibilityConverter}}"
        Height="45"/>

    <TextBox x:Name="TermsInputTxt2" Text="{Binding FilterText, Mode=TwoWay}"
        BorderBrush="#FF727272" Background="#FFD1D1D1" HorizontalAlignment="Left"
        Width="200" FontSize="16" VerticalAlignment="Center"
        Visibility="{Binding IsTxtForm, Converter={StaticResource BooleanToVisibilityConverter}}"
        Height="45"/>

    <Button x:Name="TrashBtn" HorizontalAlignment="Left" VerticalAlignment="Stretch"
        BorderBrush="#FF575757" Foreground="#FF494949" BorderThickness="2" Tapped="TrashBtn_Tapped"
        Style="{StaticResource DiscardAppBarButtonStyle}" Height="45" Width="55"
        RenderTransformOrigin="0.5,0.5">
        <Button.RenderTransform>
            <CompositeTransform ScaleX="-1" />
        </Button.RenderTransform>
    </Button>
</StackPanel>

它有一个组合框和两个文本框。默认情况下,组合框不显示任何内容,只是一个空白项,我希望当用户在 TermsInputTxt1 或 TermsInputTxt2 中键入一些文本时,组合框将选择第一项。

我尝试使用转换器将组合框的选定索引与这两个文本框的长度绑定,但看起来 XAML 不支持这样的多重绑定。

有什么建议吗?谢谢!

【问题讨论】:

    标签: xaml windows-store-apps


    【解决方案1】:

    所以,这是一个有点困难的情况。你有几种方法:

    • TermsInputTxt1TermsInputTxt2 绑定到ViewModel,使用ViewModel 上的Setter 控制ObservableCollection,添加和删除属性中设置的项目。
    • 为每个带有值字段 (string) 的条目创建一个Model,并将Terms... 绑定到ViewModel 中的访问器。然后,ComboBox 项目将自动更改。

    我建议做第一个。您必须在 ViewModel 中有一个 SelectedItem/SelectedIndex 属性,ComboBox 将绑定到该属性。您可能还想更改 TextBoxs 上的绑定更新的方法,以便立即更新它们(大量处理)或在失去焦点之后(较少处理,但不会立即更新 UI )。

    【讨论】:

    • 我们可以从后面的代码中访问 TermsInputTxt1、TermsInputTxt2 和组合框吗?如果是,我认为这种情况会更容易。
    • 可以,但是很难。您必须解析VisualTree。查找WinRTXamlToolkit,因为它有一些有用的扩展,例如GetDescendends&lt;Type&gt;()
    • 感谢您的建议,我尝试执行您建议的第一个解决方案,但我无法在用户输入时绑定文本框,只有在失去对文本框的关注时才有效,我正在开发在 WIndows 8 环境中,我没有看到 UpdateSourceTrigger 或类似的东西,知道吗?
    • UpdateSourceTrigger 在 Windows 8.1 中添加。不过,有一些方法可以使用 Behaviors 和一些扩展来做到这一点。我认为 WinRTXamlToolkit 也有这方面的功能。
    • 感谢您的帮助,我会努力的:)
    猜你喜欢
    • 2011-02-28
    • 1970-01-01
    • 2012-02-06
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多