2016-08-31 5 views
0

내 WPF 응용 프로그램에 ListView가 있는데, 이는 LOG 클래스와 잘 작동합니다. LOG 클래스는 단독으로 작동하며 클래스를 사용하고 ListView를 새 프로젝트에 복사 할 수는 있지만 새 프로젝트에서 방금 참조하는 DLL을 만들 것입니다.WPF ListView에서 템플릿을 만들어 dll에 추가 하시겠습니까?

나는 새로운 라이브러리 프로젝트, 자신의 네임 스페이스 및 모든 것에 LOG 클래스를 가지고있다.

dll을 참조하여 다시 사용할 수있는 dll의 템플릿에 ListVIew를 가져 오는 방법은 무엇입니까? 한마디로

, 내 ListView에 보이는 같은 :

<ListView stuffs="stuff" ItemsSource="{Binding Source={x:Static local:LOG.LogList}, Mode=OneWay}"> 
    <i:Interaction.Behaviors> 
     <local:AutoScrollToLastItemBehavior /> <!-- Gonna put this class into the dll too --> 
    </i:Interaction.Behaviors> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <!-- Many stuffs with stuff --> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

그래서 그 대신 복사 - 붙여 넣기 모든 일을, 내가 그 DLL을 참조하고 <ListView ItemTemplate=Logger/> 또는 뭔가를 가고 싶습니다.

편집 : 나는 그것이 <UserControl>에 지금처럼 단순히 목록보기를 넣어 시도했습니다,하지만 제대로 작동하지 않았다. VS 항상 sais 마크 업 확장이 아니지만 Binding을 사용하고 있습니다.

편집 2 : 그래서 Bindin은 실제로 마크 업 확장입니다. System.Xaml 참조가 필요했습니다. 이제 Binding Source = ... 왜 Intellisense가 실제로 제안한 LOG 클래스가 그 네임 스페이스에 존재하지 않는지 알아야합니다. 그 후에는 7 개의 빨간 줄만 긋습니다.

답변

0

중 하나는 (이 작업을 수행하는 아마 방법이 있습니다) :

1) UserControl이로 목록보기 싸서 다음 컨트롤을 사용하지만,리스트 뷰의 속성 (그들 모두를 노출해야합니다 ...)를 종속성 속성으로 바인딩하려는 경우 (예 :

public partial class EditableTextBlock : UserControl 
{ 
    [Bindable(true)] 
    public TextAlignment TextAlignment 
    { 
     get { return (TextAlignment)GetValue(TextAlignmentProperty); } 
     set { SetValue(TextAlignmentProperty, value); } 
    } 
    public static readonly DependencyProperty TextAlignmentProperty = 
     DependencyProperty.Register(
     ((EditableTextBlock)null).GetMemberName(x => x.TextAlignment), 
     typeof(TextAlignment), 
     typeof(EditableTextBlock), 
     new FrameworkPropertyMetadata() 
     { 
      DefaultValue = TextAlignment.Center, 
      Inherits = true 
     }); 
//.... 
} 

). 당신이 nuget 패키지 AutoDependencyProperty.Fody를 사용하는 경우

<TextBlock TextAlignment="{Binding RelativeSource={RelativeSource AncestorType=local:EditableTextBlock}, Path=TextAlignment}" /> 

, 당신은 대부분의 경우 DependencyProperty에 정의를 단순화 할 수 있습니다으로 : ListView를 상속 해, 예를 들어,에서 템플릿을로드

만들기
[AutoDependencyProperty(Options = FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)] 
    public TextAlignment TextAlignment { get; set; } 

2) CustomListView 클래스 리소스 사전 및 생성자의 다른 속성 설정