次の XAML があります。
<Grid x:Name="root">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.Resources>
<DataTemplate DataType="{x:Type ViewModels:TemplateViewModel}">
<ContentControl Content="{Binding}" Grid.Row="0" x:Name="ct">
<ContentControl.ContentTemplate>
<DataTemplate>
<TextBlock Text="Loaded" />
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding DataContext.State,
RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Value="2">
<Setter Property="ContentTemplate" TargetName="ct">
<Setter.Value>
<DataTemplate>
<TextBlock Text="Loading, please wait" Foreground="Red"/>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</Grid.Resources>
<ContentControl Content="{Binding MainContent}" />
その XAML は Window 要素内にあります。State と MainContent の 2 つのプロパティを持つ ViewModel オブジェクトに Window をバインドしています。
public class ViewModel : INotifyPropertyChanged {
public int State {...} // this can be only 1 or 2, for simplicity
public TemplateViewModel MainContent { ... }
}
それに応じて、プロパティ セッターから PropertyChanged イベントを発生させます。
ここで、ボタンを使用してディスクからファイルをロードし、それを解析してオブジェクトを作成し、MainContent プロパティに割り当てます。解析する前に State プロパティを 2 (ロード中) に設定し、割り当て後にプロパティを 1 (ロード済み) にリセットしました。
初めてファイルを解析すると、データ テンプレートのトリガーが機能しません (トリガーが、親ウィンドウ、つまり ViewModel オブジェクトのデータ コンテキストの State プロパティにバインドされていることに注意してください)。しかし、2回目はそうです!
誰かがエラーの場所を指摘できますか?
申し訳ありませんが、ここにコードを投稿することはできませんが、回答があり、メールをいただければ共有できます..