WPF 응용 프로그램의 기본 창에 대해 다음 XAML이 아래에 있습니다. 아래의 디자인 시간을 설정하려고합니다. d:DataContext
이 모든 다양한 UserControls에 대해 성공적으로 수행 할 수 있지만 창문…
Error 1 The property 'DataContext' must be in the default namespace or in the element namespace 'http://schemas.microsoft.com/winfx/2006/xaml/presentation'. Line 8 Position 9. C:\dev\bplus\PMT\src\UI\MainWindow.xaml 8 9 UI
<Window x:Class="BenchmarkPlus.PMT.UI.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:UI="clr-namespace:BenchmarkPlus.PMT.UI"
xmlns:Controls="clr-namespace:BenchmarkPlus.PMT.UI.Controls"
d:DataContext="{d:DesignInstance Type=UI:MainViewModel, IsDesignTimeCreatable=True}"
Title="MainWindow" Height="1000" Width="1600" Background="#FF7A7C82">
<Grid>
<!-- Content Here -->
</grid>
</Window>
답변
mc:Ignorable="d"
Window 태그에 속성 을 추가해야했습니다 . 본질적으로 나는 새로운 것을 배웠다. d:
Expression Blend / Visual Studio 디자이너가 인정 하는 네임 스페이스 접두사 는 실제 컴파일러 / xaml 파서에 의해 실제로 무시 / 코멘트됩니다 !
<Window
...
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
...
/>
다음에서 가져온 것입니다
나단, 아담 (2010-06-04). WPF 4 해방 (Kindle Locations 1799-1811). 샘스 킨들 에디션.
마크 업 호환성
태그 호환성 XML 네임 스페이스 ( 일반적으로 접두사 와 함께 사용되는 http://schemas.openxmlformats.org/markup-compatibility/2006mc
)에는 XAML 프로세서가 지정된 네임 스페이스의 모든 요소 / 속성을 무시할 수없는 경우이를 무시하도록 지시하는 무시할 수없는 속성이 포함되어 있습니다. .NET 유형 / 멤버로 확인됩니다. 네임 스페이스에는 또한 무시 된 네임 스페이스 내의 특정 유형에 대해 무시할 수있는 ProcessContent 속성이 있습니다.
Expression Blend는이 기능을 활용하여 런타임에 무시할 수있는 디자인 타임 속성을 XAML 콘텐츠에 추가하는 등의 작업을 수행합니다.
mc:Ignorable
공백으로 구분 된 네임 스페이스 목록을 제공 할 수 있으며 mc : ProcessContent는 공백으로 구분 된 요소 목록을 제공 할 수 있습니다. XamlXmlReader에서 해결할 수없는 무시할 수있는 컨텐츠가 발견되면이를보고하는 노드가 없습니다. 무시할 수있는 내용을 해결할 수 있으면 정상적으로보고됩니다. 따라서 소비자는 마크 업 호환성을 올바르게 처리하기 위해 특별한 작업을 수행 할 필요가 없습니다.
답변
와, 정말 아 pain니다! MS가 x : Bind에 대한 VS 디자인 타임 지원을 제공하기를 바랍니다.
VS 디자이너를 사용할 수 있지만 바인딩 대신 x : Bind로 쉽게 전환 할 수 있습니다. 내가 한 일은 다음과 같습니다.
-
내 View에서 ViewModel을 얻기 위해 속성을 추가했습니다. x : Bind 경로는 Page (즉, View 객체)를 기준으로하기 때문에 이것은 의미가 있습니다.
-
내 페이지 XAML에서 XAML
<Page ... >
의 맨 위에 다음을 추가했습니다 .mc:Ignorable="d" d:DataContext="{d:DesignInstance Type=local:MyView, IsDesignTimeCreatable=False}" DataContext="{x:Bind}"
이런 식으로 페이지의 실제 데이터 컨텍스트는로 인해 페이지 자체로 설정됩니다 {x:Bind}
. 때문이다 x:Bind
페이지를 기준으로 주어진 어떤 경로가 없습니다.
동시에 d:DataContext
VS 디자이너는 VS 디자이너 상호 작용을 위해 인스턴스를 만들지 않고 MyView 클래스에 반영합니다. MyView의 VS 디자인을 사용하면 ViewModel 속성으로 스크롤하여 확장하고 바인딩하려는 항목을 선택할 수 있습니다.
모든 작업을 수행하면 VS 디자이너는 경로가 View에 상대적인 Binding 문을 만듭니다. 즉, x : Bind가 예상하는 경로와 정확히 동일합니다. 따라서 나중에 x : Bind로 전환하려면 모든 ” {Binding
“를 검색하고 ” “로 바꿀 수 있습니다 {x:Bind
.
d:DataContext
VS에게 어떤 클래스를보아야하는지 알려 주어야하는 이유는 무엇입니까? VS가 다음 줄을 사용하여 DataContext를 Page로 설정하여 페이지를 설정할 수 있다고 생각하기 때문에 좋은 질문 DataContext={x:Bind}
입니다. x : Bind를 self를 기준으로 Binding으로 변경하면 작동하지 않으며 작동하지 않습니다.
잘만되면이 상황은 MS에 의해 정리 될 것이다!