2017-12-01 14 views
0

코드 뒤에 다음 사용자 정의 Dependency Property을 만들었습니다. 이 종속성 속성은 infragisticsXamDataGrid이며 소유자도 마찬가지입니다. 이 속성을 통해 표에 대한 참조를 가져 오려고합니다.Intellisense에서 사용자 지정 종속성 속성이 표시되지 않습니다.

다음 코드는 오류 또는 경고없이 컴파일됩니다. 그러나 Dependency PropertyXAMLintelliSense에는 표시되지 않습니다.

전체 이름도 입력 해 보았습니다. 이 DP를 인식하지 못합니다. 프로젝트를 정리하고 다시 빌드했습니다. Visual Studio를 닫은 다음 다시 열었습니다.

using System.Windows; 
using Infragistics.Windows.DataPresenter; 

namespace Demo 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     public static readonly DependencyProperty DPRProperty = 
      DependencyProperty.Register(
          "DPR", 
          typeof(XamDataGrid), 
          typeof(MainWindow), 
          new FrameworkPropertyMetadata(null)); 

     public XamDataGrid DPR 
     { 
      get { return (XamDataGrid)GetValue(DPRProperty); } 
      set { SetValue(DPRProperty, value); } 
     } 

    } 
} 
+1

시도해 보셨습니까? Clean Solution + ReBuild – jHilscher

+0

@jHilscher 예. 나는 그 질문에 그것을 명시했다. – Rick

+0

XAML 편집기에서 ''태그 안에 입력하면됩니까? – Clemens

답변

0

문제는 당신이 종속성 속성은 당신이 Window에 대한 DP를 만들었지 만 MainWindow

을 위해하지 않았다, 그러나 당신의 기본 클래스의 XAML "코드"

에 표시하는 기대 당신의 경우 당신이 보관하려고 무엇을 설명 할 수있는 경우 <MainWindow /> 태그를 사용하는 것, 그것은

을 보여줄 것, 하나는 당신에게 더

도움이 될 수 있습니다 편집

내가 당신의 목표는

, 당신은 DP 필요없는 객체에 대한 참조를 가져 아니라 모든에게 필요한 제대로

물건을 주문해야 할 무엇인지 이제 이해 생각 :

  • 창 (명백하게)
  • DataC 첨부 속성이의 DataContext에서이

    public class Initialized 
    { 
        public static DependencyProperty CommandProperty = 
         DependencyProperty.RegisterAttached("Command", 
         typeof(ICommand), 
         typeof(Initialized), 
         new UIPropertyMetadata(CommandChanged)); 
    
        public static DependencyProperty CommandParameterProperty = 
         DependencyProperty.RegisterAttached("CommandParameter", 
                  typeof(object), 
                  typeof(Initialized), 
                  new UIPropertyMetadata(null)); 
    
        public static void SetCommand(DependencyObject target, ICommand value) 
        { 
         target.SetValue(CommandProperty, value); 
        } 
    
        public static void SetCommandParameter(DependencyObject target, object value) 
        { 
         target.SetValue(CommandParameterProperty, value); 
        } 
        public static object GetCommandParameter(DependencyObject target) 
        { 
         return target.GetValue(CommandParameterProperty); 
        } 
    
        private static void CommandChanged(DependencyObject target, DependencyPropertyChangedEventArgs e) 
        { 
         var type = target.GetType(); 
         var ev = type.GetEvent("Initialized"); 
         var method = typeof(Initialized).GetMethod("OnInitialized"); 
    
         if ((e.NewValue != null) && (e.OldValue == null)) 
         { 
          ev.AddEventHandler(target, Delegate.CreateDelegate(ev.EventHandlerType, method)); 
         } 
         else if ((e.NewValue == null) && (e.OldValue != null)) 
         { 
          ev.RemoveEventHandler(target, Delegate.CreateDelegate(ev.EventHandlerType, method)); 
         } 
        } 
    
        public static void OnInitialized(object sender, EventArgs e) 
        { 
         var control = sender as FrameworkElement; 
         var command = (ICommand)control.GetValue(CommandProperty); 
         var commandParameter = control.GetValue(CommandParameterProperty); 
         command.Execute(commandParameter); 
        } 
    } 
    

    처럼 꽤 많이 찾고 일부 코드 숨김

  • 첨부-재산권

에게

  • 타세, 새로운를 생성 (이름이 MainWindowDataContext가 있습니다) ICommand 명령에 전달 된 매개 변수를 인스턴스 변수에 넣는 속성 (이름은 CmdInitialized)

    는 그런 다음 XAML 코드에서 당신은 같은 AttachedProperty를 사용하는 일반적인

    <!-- `ev:` is the XAML namespace the Initialized class is located in --> 
    ev:Initialized.Command="{Binding CmdInitialized}" 
    ev:Initialized.CommandParameter="{Binding RelativeSource={RelativeSource Self}}" 
    

    중요한 부분 그러나입니다 : DataContext를가 compontents가

    을 초기화하기 전에 이미 윈도우에 부착해야이 당신을 의미 이런 일에 윈도우 코드를 편집 할 수 있습니다 이후

    public MainWindow() 
    { 
        this.DataContext = new MainWindowDataContext(); 
        InitializeComponent(); 
    } 
    

    , 당신은 당신이 경우 N

    괜찮을 것 ICommand 용 eed 솔루션, google에서 을 검색하십시오.