2015-12-05 21 views
5

Tôi đang cố gắng xây dựng ứng dụng UWP của mình và hiện đang bị mắc kẹt với ngoại lệ thiết kế khi cố gắng sử dụng DataTemplate với x: Bind trong một từ điển tài nguyên.x: Bind Design Time vấn đề

Tôi đã tạo một Từ điển tài nguyên "ItemTemplates.xaml" với mã tương ứng (để đảm bảo x: Khởi tạo Bind). Các tập tin có chứa chỉ là một mẫu:

<DataTemplate x:Key="HomeViewCategoryListItemTemplate" x:DataType="models:Category"> 
    <Button Background="#88333333" Height="110" VerticalContentAlignment="Top" Padding="10" HorizontalAlignment="Stretch"> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
      </Grid.RowDefinitions> 
      <TextBlock FontWeight="Light" HorizontalAlignment="Center" Text="{x:Bind Name}" FontSize="{ThemeResource TextStyleExtraLargeFontSize}" /> 
      <TextBlock Foreground="{ThemeResource ToolTipForegroundThemeBrush}" HorizontalAlignment="Center" Margin="0,10,0,0" Text="{x:Bind Description}" Grid.Row="1" TextAlignment="Center" TextWrapping="Wrap" /> 
     </Grid> 
    </Button> 
</DataTemplate> 

Sau đó, tôi thêm vào từ điển tài nguyên này để App.xaml như thế này:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="ms-appx:///Resources/Core.xaml" /> 
      <resources:ItemTemplates /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

Bây giờ dự án này là không sử dụng được, vì nhà thiết kế ném ngoại lệ kỳ lạ, nhưng khi tôi sạch và xây dựng lại dự án và điều hướng đến trang HomeView.xaml, nhà thiết kế chỉ hiển thị các mục "ToString()" mặc định (về cơ bản chế độ xem danh sách chỉ chứa ba lần văn bản "Models.Categories") trong ListView và ItemTemplate thuộc tính của ListView của tôi được gạch chân và hiển thị lỗi sau:

The resource "HomeViewCategoryListItemTemplate" could not be resolved. 

Khi tôi điều hướng trở lại App.xaml, tôi thấy thêm một gạch dưới đó (của dòng <resources:ItemTemplates />) mà nói:

The property 'DataType' was not found in type 'DataTemplate'. 

Cả hai lỗi đều là phòng không sensical, bởi vì khi tôi thực sự chạy các ứng dụng, không có vấn đề và tất cả mọi thứ hoạt động hoàn hảo. Cách giải quyết duy nhất mà tôi đã tìm thấy cho đến nay là để bao gồm các ResourceDictionary hai lần trong cả hai cách cổ điển và cách "biên soạn":

<ResourceDictionary Source="ItemTemplates.xaml" /> 
<resoures:ItemTemplates /> 

giải pháp này hoạt động và sau đó mọi thứ hoạt động cả trong thời gian thiết kế và trong thời gian chạy , nhưng tôi thực sự nghĩ rằng nó khá lộn xộn và phải có một cách tiếp cận tốt hơn, an toàn hơn hoặc tôi thiếu một thứ gì đó tầm thường.

Tôi đang chạy Visual Studio 2015 Update 1 và cài đặt UWP SDK mới nhất. Mục tiêu dự án xây dựng 10240.

Edit: Một ngoại lệ mà các nhà thiết kế rất thường xuyên ném và bị treo hoàn toàn:

Unable to cast object of type 'System.String' to type 'Models.Data.Categories.Category'. 

Theo kết quả StackTrace điều này xảy ra bên trong mã ItemTemplates.xaml.cs - đặc biệt là phương thức đã tạo ProcessBindings. Một lần nữa, dự án vẫn biên dịch và chạy bình thường, nhưng nhà thiết kế thậm chí không bận tâm cố gắng hiển thị đầu ra.

+1

Mã lớp ItemTemplates của bạn trông như thế nào? Có lẽ hướng dẫn này giúp? http://igrali.com/2015/06/14/how-to-use-compiled-bindings-xbind-from-a-resource-dictionary/ – sibbl

+3

Tôi nghe thấy nỗi đau của bạn. Tôi đã có rất nhiều và rất nhiều vấn đề thiết kế với các ứng dụng UWP mặc dù mọi thứ hoạt động tốt ... –

+0

sibbl: ItemTemplates của tôi không hoạt động ngay cả khi chúng chỉ đơn giản ' 'nội dung. Tôi đã kiểm tra và tôi đã làm theo các bước trong hướng dẫn mà bạn đã liên kết và nó không giúp ích gì ... –

Trả lời

0

Đối với phiên bản hiện tại này, thích Ràng buộc trên x: Bind

an answer from a Microsoft engineers

Tôi đã có những vấn đề tương tự như bạn đã làm, cộng với một tấn các lỗi khi sử dụng x: Ràng buộc trong thiết kế thời gian. Cách nhanh nhất để khắc phục: sử dụng Binding như cũ. Và khi bạn phát hành, nếu hiệu suất đang được xem xét, hãy thay đổi Ràng buộc thành x: Bind

+0

-1 bạn đang muốn sử dụng 'Binding' như thể điều này đã được hỗ trợ bởi liên kết của bạn và do đó Microsoft. Nhưng đó không phải là nó. Trong liên kết của bạn, một người nào đó từ Microsoft đã quyết định sử dụng 'Binding' vì _Design Time Data_ không phải vì các vấn đề trong chế độ Thời gian thiết kế của Visual Studio. Vì vậy, điều này không thực sự trả lời câu hỏi. –

+0

Vẫn còn một số thuộc tính không thể hoạt động với x: Bind –

Các vấn đề liên quan