كيفية إنشاء اثنين من التسلسل الهرمي datateMplates اللذين مرجعان للطرفين في Silverlight؟

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

سؤال

بشرط:

  1. لا يمكن تعيين datatemplates بواسطة TargetType
  2. يمكن أن تشير مراجع StaticResource فقط من قبل

كيف يمكن أن يكون قالب واحد الموقف التالي في TreeView؟

class Resource {
  public string Name {get;}
  public IEnumerable<Property> Properties {get;}
}

class Property {
  public string Name {get;}
  public IEnumerable<Resource> Values {get;}
}

هذا الهيكل يفسح المجال لشجرة ستبدو:

Resource 1
|- Property A
   | - Resource 2
   | - Resource 3
|- Property B
   |- Resource 4

هذا من شأنه تافهة إلى القالب في WPF بسبب TargetType ممتلكات HierarchicalDataTemplate. في Silverlight ، سيتعين علينا أن نفعل شيئًا أكثر مثل:

<HierarchicalDataTemplate x:Key="ResourceTemplate"
                          ItemSource="{Binding Properties}"
                          ItemTemplate={StaticResource PropertyTemplate}" />

<HierarchicalDataTemplate x:Key="PropertyTemplate"
                          ItemSource="{Binding Values}"
                          ItemTemplate="{StaticResource ResourceTemplate}" />

من الواضح أنه لا يمكن أن يعمل بسبب ResourceTemplate لا يمكن الرجوع PropertyTemplate لأنه تم تعريفه بعده في مستند XAML. لذا ، كيف تحل مشكلة الدجاج والبيئة؟

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

المحلول

الحل المعقول الوحيد الذي وجدته هو إنشاء نوع ثالث من العرض الذي يلف أيًا من النوعين الأولين (الموارد أو الممتلكات) وتوفير خصائص شائعة لربط: (مثل الأطفال). هذا لا يزال ليس مثاليًا للغاية ، إذا كان النوعان بحاجة إلى قوالب مختلفة جدًا لأنني في هذه المرحلة ، أستخدم VisualStateManager للتبديل بين القوالب للبيانات.

<HierarchicalDataTemplate x:Key="TreeItemTemplate"
                          ItemSource="{Binding Children}">
  <ContentPresenter Content="{Binding}">
    <VisualStateManager.Groups>
      <VisualStateGroup>
        <VisualState Name="IsResource">
          <!-- set resource template -->
        </VisualState>
        <VisualState Name="IsProperty">
          <!-- set property template -->
        </VisualState>
      </VisualStateGroup>
    </VisualStateManager.Groups>
  </ContentPresenter>
</HierarchicalDataTemplate>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top