2

次の 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回目はそうです!

誰かがエラーの場所を指摘できますか?

申し訳ありませんが、ここにコードを投稿することはできませんが、回答があり、メールをいただければ共有できます..

4

1 に答える 1

2

YourDataTemplateは typeTemplateViewModelの代わりに適用されViewModelます。したがって、MainContentプロパティが設定されるまでは何にも適用されません。

于 2009-02-27T17:16:11.210 に答える