Wpf XAML中的强制绑定更新
我有一个视图,其中有一个列表框和几个绑定到列表框中显示的对象属性的文本框。打开时,列表框中填充了数据,我的样式中有以下内容,以确保在有项目且未选择任何内容时,选择第一个项目Wpf XAML中的强制绑定更新,wpf,data-binding,xaml,triggers,Wpf,Data Binding,Xaml,Triggers,我有一个视图,其中有一个列表框和几个绑定到列表框中显示的对象属性的文本框。打开时,列表框中填充了数据,我的样式中有以下内容,以确保在有项目且未选择任何内容时,选择第一个项目 <Style.Triggers> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="SelectedItem" Value="{x
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="SelectedItem" Value="{x:Null}"/>
<Condition Property="HasItems" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="SelectedIndex" Value="0"/>
</MultiTrigger>
</Style.Triggers>
这很有效。填充列表时,始终选择列表中的第一项
不幸的是,即使选择了第一项,绑定到selectedItems属性(通过其父网格datacontext)的文本框似乎也不会收到通知
任何人都知道强制他们更新的方法(如果可能,使用XAML)。目前,绑定看起来非常:
<TextBox Text="{Binding Weight, ConverterParameter=\{0:F\}, Converter={StaticResource FormattingConverter}, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" />
任何帮助都将不胜感激
科里
=========================编辑====================
下面是使用PackageList SelectedItem作为其数据上下文显示网格PackageDetailsGrid的XAML:
<StackPanel Orientation="Vertical" d:LayoutOverrides="Height">
<TextBlock Text="Packages" Style="{DynamicResource TitleText}"/>
<ListBox x:Name="PackageList" Style="{StaticResource SnazzyList}" FocusVisualStyle="{x:Null}" Margin="0" ItemsSource="{Binding Source={StaticResource Packages}}" HorizontalContentAlignment="Stretch" Height="132.5" Background="#18000000">
</ListBox>
<Grid Margin="0,0,8,0">
<Button Content="Add" Margin="20,0,0,0" Width="87" HorizontalAlignment="Left" Style="{DynamicResource ClearButton}" Command="{Binding AddPackageCommand}" Visibility="{Binding ShipmentRecord.TransitStatus, Converter={StaticResource ShippedToVisibilityConverter}}"/>
<Button Content="Delete" Margin="0,0,20,0" Style="{DynamicResource ClearButton}" HorizontalAlignment="Right" Width="87" Height="21.4666666666667" Command="{Binding DeletePackageCommand}" CommandParameter="{Binding SelectedItem, ElementName=PackageList, Mode=Default}" Visibility="{Binding ShipmentRecord.TransitStatus, Converter={StaticResource ShippedToVisibilityConverter}}"/>
</Grid>
</StackPanel>
<Grid x:Name="PackageDetailsGrid" Margin="0" Grid.Column="1" DataContext="{Binding Items.CurrentItem, ElementName=PackageList, Mode=Default}">
<StackPanel Margin="0">
<Grid Margin="0,0,0,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40*"/>
<ColumnDefinition Width="60*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="Dimensions" Foreground="White" FontWeight="Bold"/>
<StackPanel Grid.Column="1" Orientation="Horizontal" d:LayoutOverrides="Height">
<TextBox Text="{Binding Height, ConverterParameter=\{0:F\}, Converter={StaticResource FormattingConverter}, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" Width="48" TextWrapping="Wrap" Margin="0" HorizontalAlignment="Left" IsEnabled="{Binding CanEnterPackageDetails}">
<i:Interaction.Behaviors>
<local:SelectAllOnFocusTextboxBehavior/>
</i:Interaction.Behaviors>
</TextBox>
<TextBlock Text="X" Style="{DynamicResource XTextBlockStyle}"/>
<TextBox Text="{Binding Width, ConverterParameter=\{0:F\}, Converter={StaticResource FormattingConverter}, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" Width="48" TextWrapping="Wrap" Margin="0" HorizontalAlignment="Left" IsEnabled="{Binding CanEnterPackageDetails}">
<i:Interaction.Behaviors>
<local:SelectAllOnFocusTextboxBehavior/>
</i:Interaction.Behaviors>
</TextBox>
<TextBlock Text="X" Style="{DynamicResource XTextBlockStyle}"/>
<TextBox Text="{Binding Length, ConverterParameter=\{0:F\}, Converter={StaticResource FormattingConverter}, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" Width="48" TextWrapping="Wrap" Margin="0" HorizontalAlignment="Left" IsEnabled="{Binding CanEnterPackageDetails}">
<i:Interaction.Behaviors>
<local:SelectAllOnFocusTextboxBehavior/>
</i:Interaction.Behaviors>
</TextBox>
</StackPanel>
</Grid>
</StackPanel>
</Grid>
以下是文本框的一些xaml,该文本框的文本属性绑定到列表视图的SelectedItem属性。它包括在未选择任何内容时自动选择第一项的代码 这就是你想要的解决方案吗?如果没有,我需要更多信息,即您正在处理的所有相关代码
<StackPanel>
<TextBox Text="{Binding SelectedItem, ElementName=MyListView}" />
<ListView x:Name="MyListView">
<ListView.Style>
<Style TargetType="ListView">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="SelectedItem" Value="{x:Null}"/>
<Condition Property="HasItems" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="SelectedIndex" Value="0"/>
</MultiTrigger>
</Style.Triggers>
</Style>
</ListView.Style>
<ListView.Items>
<System:String>hello</System:String>
<System:String>world</System:String>
</ListView.Items>
</ListView>
</StackPanel>
你好
世界
列表框中的选定项与文本框之间的关系是如何定义的?文本框位于网格中,其datacontext设置为列表框中的选定项。这种设置有一些奇怪之处。例如。如果列表中只有一个对象,并且它是自动选择的,则文本框保持为空。单击该项不会导致它重新选择该项或任何内容,因此文本框保持为空。如果有两个或两个以上的项目,我可以选择一个项目(不是第一个),一切都按预期进行。文本框使用列表框中所选项目的属性值进行更新。请为我们提供网格上与父datacontext的绑定;据我所知,此设置看起来很好,应该按预期运行。Datacontext代码已发布。我确信这会起作用,但这些是在加载视图时在单独线程中检索的数据对象。因此,在实例化listBox时,通常不会加载对象。看起来由于加载延迟,有某种通知没有发生。