如何在WPF中铸造
本文关键字:WPF | 更新日期: 2023-09-27 17:53:50
我碰巧需要将Grid的DataContext
绑定到listview的SelectedItem
属性
我可以做没有任何问题....然而,由于Listview的SelectedItem
存储了一个对象,XAML编辑器不知道它正在使用的类型,这导致以下警告显示:"无法在'object'类型的数据上下文中解析属性X"
是否有办法在一个绑定中指定对象的类型(我搜索了WPF强制转换,但没有找到相关资源)
这是我的XAML的相关摘录:
<ListView x:Name="ListView" ItemsSource="{Binding LoginScreens}" Grid.Column="0" Grid.Row="0" SelectionMode="Single"/>
<Grid Grid.Column="1" Grid.Row="0" DataContext="{Binding SelectedItem, ElementName=ListView}">
<Grid.RowDefinitions>
/*rows*/
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
/*Columns*/
</Grid.ColumnDefinitions>
<TextBox Grid.Row="0" Grid.Column="1" Style="{StaticResource TextBoxStyle}" Text="{Binding Name}"/>
<TextBox Grid.Row="1" Grid.Column="1" Style="{StaticResource TextBoxStyle}" Text="{Binding NameFr}"/>
<TextBox Grid.Row="2" Grid.Column="1" Style="{StaticResource TextBoxStyle}" IsEnabled="False" Text="{Binding Filename}"/>
<TextBox Grid.Row="3" Grid.Column="1" Style="{StaticResource TextBoxStyle}" IsEnabled="False" Text="{Binding SHA1}"/>
</Grid>
我在TextBox的绑定中尝试了以下语法,但没有工作:
<TextBox Grid.Row="0" Grid.Column="1" Style="{StaticResource TextBoxStyle}" Text="{Binding (manifestEditor:LoginScreen.Filename)}"/>
但是它会导致一个错误抛出关于一个键是空的ListDictionary,所以要么我错过了什么,要么它不是正确的方式去。
编辑:我希望尽可能只使用XAML来处理
你的代码对我来说很好。为了添加一些新的有用的东西,这里有另一种定义SelectedItem绑定的方法:
<Grid>
<StackPanel>
<ListView x:Name="ListView" ItemsSource="{Binding LoginScreens}"
IsSynchronizedWithCurrentItem="True"
SelectionMode="Single"/>
<Grid DataContext="{Binding LoginScreens}">
<StackPanel>
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Name}"/>
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding NameFr}"/>
<TextBox Grid.Row="2" Grid.Column="1" IsEnabled="False" Text="{Binding Filename}"/>
<TextBox Grid.Row="3" Grid.Column="1" IsEnabled="False" Text="{Binding SHA1}"/>
</StackPanel>
</Grid>
</StackPanel>
</Grid>
IsSynchronizedWithCurrentItem将绑定集合的默认CollectionView的CurrentItem与控件的SelectedItem同步,并通过选择Grid的DataContext作为ObservableCollection LoginScreens,您将根据ListView的选择获得更新。
将SelectedItem绑定到ViewModel。将DataGrid的数据上下文绑定到同一个ViewModel。只要ViewModel知道它使用的是什么类型,一切都应该正常工作。