1

Caliburn.Micro.Contrib のConductResultを使用して、コンダクターの新しいアイテムをアクティブにしています。Conductor のタイプは でConductor<IScreen>.Collection.OneActive、すでに 1 つのアイテムが表示され、正しく動作しています。

ただし、アクティブ化された後、新しいアイテムは表示されません。私はすでにチェックしており、コンダクターのActiveItemはその新しいアイテムに設定されており、新しいアイテムもアクティブになっています。View のIsVisibleも new item が true に設定されているため、表示されない理由がわかりません。

コンダクターのビューの XAML は非常に単純です。

<UserControl x:Class="..."
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:cal="http://www.caliburnproject.org"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto" />
            <RowDefinition Height="auto" />
            <RowDefinition />
        </Grid.RowDefinitions>

        <TextBlock Grid.Row="0" Text="{Binding Path=ActiveItem, Converter={StaticResource objectTypeConverter}}" Margin="5" />
        <ItemsControl Grid.Row="1" ItemsSource="{Binding Items}" BorderBrush="Aqua" BorderThickness="10 ">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding Converter={StaticResource objectTypeConverter},ConverterParameter=something}" Margin="5" />
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
        <ContentControl Grid.Row="2" x:Name="ActiveItem" />
    </Grid>
</UserControl>

(TextBlock と ItemsControl はデバッグ目的で存在します。これらは、新しい項目がコンダクター内で実行され (つまり、Items コレクションに含まれている)、新しい項目が ActiveItem として設定されていることを証明します)

4

1 に答える 1

0

私の場合、IoC.Get<IShell>親ビューモデルにアクセスするために使用していました。

デフォルトのブートストラッパーはcontainer.PerRequest<IShell, ShellViewModel>(); 、それがクラスの別のインスタンスを取得していた理由でありShellViewModel、アイテムを正常にアクティブ化しましたが、UI は更新されませんでした。

修正する 1 つの方法は、に置き換えるcontainer.PerRequestことcontainer.Singletonです。もう一つIoC.Get<IShell>()( (IShell)Parent )

于 2016-12-22T07:57:46.517 に答える