2014-05-14 3 views
1

DataGrid ItemSource에없는 속성에 DataGrid DataGridTemplateColumn을 바인딩 할 수 있지만 속성이 Itemsource의 동일한 DataContext 내에 있는지 궁금합니다.DataGrid ItemSource에없는 속성에 WPF 바인딩

XAML

 // I am trying to bind the Visibility property to a property called Visible 
     <DataGridTemplateColumn Header="Apply" Visibility="{Binding source Visible}"> 

     // However the visible property doesnt exist inside the resource cvsCustomers 
     ItemsSource="{Binding Source={StaticResource CustomerCollection}}" 

는 C#

// But they both live in the same ViewModel i.e. DataContext  
    private Visibility m_Visible = Visibility.Hidden; 

    public Visibility Visible 
    { 
     get { return m_Visible; } 
     set { m_Visible = value; } 
    } 

    private ObservableCollection<Customer> m_CustomerCollection = null; 

    public ObservableCollection<Customer> CustomerCollection 
    { 
     get { return m_CustomerCollection; } 
     set { m_CustomerCollection = value; } 
    } 

이는

를 달성 할 수 있습니까?

감사

+0

로 DataGridTemplateColumn의 가시성을 결합 할 수있다'CustomerCollection '보기 모델 클래스에서 ItemsSource를 ResourceDictionary에있는 컬렉션에 "CustomerCollection"키를 사용하여 바인딩합니다. 그건별로 의미가 없습니다. – Clemens

+1

죄송합니다 - CustomerCollection에서 필터링해야하므로 컬렉션은 CollectionViewSource에서 가져온 것입니다. – user3428422

+0

확인. DataGrid의 DataContext가 ViewModel 클래스의 인스턴스라면 Visibility = "{Binding Visible}"또는 "Visibility ="{Binding Path = Visible} "로 바인드 할 수 있어야합니다. – Clemens

답변

4

에서 Datagrid 열은 DataGrid의 시각적 트리에서 제공하지 않습니다. 따라서 BindingProxy를 사용하여 DataGridTemplateColumn에서 ViewModel에 액세스 할 수있게해야합니다. 내가 만들고 아래 질문에 대해 답 BindingProxy를 사용하는 방법을 설명했다 : 당신이 우리에게 속성을 보여하지만 당신은 설정이 있으면

Bind ViewModel property to DataGridComboBoxColum

가 BindingProxy 당신이

<DataGridTemplateColumn Header="Apply" Visibility="{Binding Path=Data.Visible, Source={StaticResource ProxyElement}" 
+0

왜 그들은 (Microsoft) 이런 식으로 디자인해야합니까? 하지만 선생님, 감사합니다. – user3428422