يعمل DataTemplate بيانات البيانات فقط من المرة الثانية

StackOverflow https://stackoverflow.com/questions/595659

  •  09-09-2019
  •  | 
  •  

سؤال

لدي 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 داخل عنصر النافذة. أنا ملزمة النافذة إلى كائن ViewModel مع خصائص، ولاية وعاسرة:

public class ViewModel : INotifyPropertyChanged {
   public int State {...} // this can be only 1 or 2, for simplicity
   public TemplateViewModel MainContent { ... } 
}

أرفع الحدث الخاص بالخصوصية من مكان الإقامة وفقا لذلك.

الآن، مع زر قمت بتحميل ملف من القرص، تحليله وإنشاء كائن لتعيين خاصية Maincontent. قبل التحليل، أقوم بتعيين خاصية الحالة إلى 2 (التحميل) وبعد تعيين إعادة تعيين الخاصية إلى 1 (تحميل).

في المرة الأولى التي أقوم فيها بتحليل الملف، لا يعمل الزناد في قالب البيانات (لاحظ أن الزناد مرتبط بخاصية الحالة لسياق البيانات من نافذة الأصل، أي كائن ViewModel). لكن المرة الثانية، يفعل!

يمكن أن يشير شخص ما أين الخطأ؟

أخشى أنني لا أستطيع نشر الكود هنا، لكن هل يمكن مشاركتها إذا كان لديك إجابة وتعطيني رسالة بريد إلكتروني ..

هل كانت مفيدة؟

المحلول

لك DataTemplate يتم تطبيقه على الكتابة TemplateViewModel بدلا من ViewModel. وبعد Ergo، لن ينطبق على أي شيء حتى MainContent تم تعيين الملكية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top