2016-10-06 3 views
0

당신의 도움이 필요합니다! 다음은 내 주요 XAML보기에 무엇을 기본적으로 :PropertyGrid 용 하이브리드 MVVM 구현 (DevExpress에서)

<Button x:Name="button1" Content= "{Binding Customer1, Mode=TwoWay}" Margin="271,52,103,106" Click="button1_Click" /> 

주요 XAML (코드 숨김의 코드 숨김, 그것은 100 % 순수 MVVM하고, 오히려 하이브리드 아니다 이후)은 다음과 같습니다 :

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

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 


     DXDialog d = new DXDialog("Information", DialogButtons.OkCancel,true); 
     d.Content = new PropertyGrid(); 
     d.SizeToContent = System.Windows.SizeToContent.WidthAndHeight; 
     d.Owner = this; 
     d.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner; 
     var result = d.ShowDialog(); 
     if (result == true) 
     { 

     } 


    } 

볼 수 있듯이 ViewModel 클래스의 String 속성에 바인딩 된 Button이 있습니다. 버튼을 클릭하면 ViewModel 클래스의 Properties로 PropertyGrid가 포함 된 DXDialog가 열립니다. 내가 당신에게 내 의 ViewModel 클래스을 보여 드리죠 아래 : 대화에서

public class MyViewModel : ViewModelBase, INotifyPropertyChanged 
    { 
     Customer currentCustomer; 

     protected string _customer1; 
     public string Customer1 { 
      get { return this._customer1; } 
      set { this.SetProperty(ref this._customer1, value, "Customer1"); } 
     } 


     public MyViewModel() 
     { 
      //Customers = new ObservableCollection<Customer>(); 
      //Customers.Add(new Customer() { Name = "Name1" }); 
      Customer1 = "ABC"; 

     } 
} 

내가 속성 값을 편집 할 수있는거야 아직 내가 그 즉시 방식으로 저장할 수 있습니다 방법을 모른다 메인 뷰의 버튼에도 반영됩니다. {경계가있는 모든 곳을 반영합니다.} 나는 실행이

if (result == true) 
      { 

      } 

뒤에 주요 코드에서 다음 줄에 오는 것을 볼 수 있습니다하지만 편집 된 값을 얻는 방법을 알고 올바른 위치로 연결하지 마십시오.

기본적으로, 필자의 요구 사항은 ViewModel 클래스의 여러 인스턴스에 바인딩 된 여러 컨트롤 (이 경우 버튼)을 누른 다음 버튼을 클릭 할 때 PropertyGrid 내에서 특정 ViewModel 인스턴스를 편집 할 수 있어야합니다. DXDialogue의 "OK"를 클릭 한 후에 변경 사항은 관련 버튼에도 반영되어야합니다. -Ron

답변

1

는 PropertyGrid가에서의 ViewModel의 속성을 표시의 SelectedObject 속성에 뷰 모델을 할당하고, ShowProperties 옵션 모든로 설정되어 있는지 확인하십시오.

변경 사항은 주 및 대화 상자 창에서 하나의 동일한 ViewModel 인스턴스 만 사용하는 ViewModel에 바인딩 된 단추에 반영됩니다.

var grid = new PropertyGrid(); 
grid.SelectedObject = this.DataContext; 
grid.ShowProperties = ShowPropertiesMode.All; 
d.Content = grid;