如何在WPF中强制转换

时间:2015-06-05 17:37:23

标签: c# wpf xaml

我碰巧需要将网格DataContext绑定到列表视图的SelectedItem属性

我可以毫无问题地执行此操作....但是,由于Listview的SelectedItem存储了一个对象,因此XAML编辑器不知道它正在使用的类型,这会导致以下警告要显示:"无法在类型'对象'"

的数据上下文中解析属性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来处理这个

2 个答案:

答案 0 :(得分:7)

您的代码适用于我。只是在这里添加一些新的和有用的东西是另一种定义与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选择获取更新。

答案 1 :(得分:0)

将SelectedItem数据绑定到ViewModel。将DataGrid的datacontext数据绑定到同一个ViewModel。只要ViewModel知道它使用的类型,一切都应该运行良好。