2014-05-15 5 views
0

저는 WPF에 비교적 익숙하지 않으며 MVVM 패턴을 사용하여 첫 번째 프로젝트를 디자인하려고합니다.사용자 정의 컨트롤에 별도의 데이터 바인딩 설정

이제 내보기로 기본 창이 있습니다.이 사용자 정의 컨트롤이 있습니다. 이제 사용자 정의 컨트롤에는 2 개의 확장자가 있으며 각각 자체 데이터를 가져와야합니다.

<Expander Header="Electrical Components" Name="EC" 
        IsExpanded="True"> 
      <ItemsControl ItemsSource="{Binding ElecViewModel.ToolBoxItems }"> 
       ............ 
    <Expander Header="Structural Components" Name="SC" 
        IsExpanded="True"> 
      <ItemsControl ItemsSource="{Binding StructViewModel.ToolBoxItemsS}"> 
       ............. 

그래서 저는 각 확장기에 대해 데이터 바인딩을 할 수 있다는 아이디어로 2 개의 뷰 모델을 만들었습니다. 아이디어는 각 확장기 아래에 일부 이미지를 가져 오는 것입니다. 먼저 확장 나는이보기 모델

public class ElecViewModel 
{ 
    private List<ToolBoxData> toolBoxItems = new List<ToolBoxData>(); 
    public ElecViewModel() 
    {   
     toolBoxItems.Add(new ToolBoxData("../Images/Inverter.jpg", typeof(InverterDesignerItemViewModel)));   
     toolBoxItems.Add(new ToolBoxData("../Images/Recombiner.jpg", typeof(RecombinerDesignerItemViewModel))); 
    } 
    public List<ToolBoxData> ToolBoxItems 
    { 
     get { return toolBoxItems; } 
    } 
    } 

.. 그리고

public class StructViewModel 
{ 
    private List<ToolBoxData> toolBoxItemsS = new List<ToolBoxData>(); 

    public StructViewModel() 
    { 

     toolBoxItemsS.Add(new ToolBoxData("../Images/SafetySwitch.jpg", typeof(SafetySwitchDesignerItemViewModel)));   
     toolBoxItemsS.Add(new ToolBoxData("../Images/ScadaPanel.jpg", typeof(ScadaDesignerItemViewModel))); 
    } 

    public List<ToolBoxData> ToolBoxItemsS 
    { 
     get { return toolBoxItemsS; } 
    } 
} 

지금 내 첫 번째 확장이 두 번째가 '아무튼 올바른 images.whereas로드지고이보기 모델에 두 번째에 연결 티. 첫 번째 목록처럼 바인딩 한 경우에도 두 번째보기 모델의 공용 목록에 충돌이 발생하지 않습니까? 거기에 대한 명백한 이유가 있습니까? 첫 번째 목록에 두 번째 확장기의 바인딩 소스를 설정하는 시도하고 두 번째에 대한 목록을 제안하는 채워지는 받고 컨트롤에 바인딩 된 일부 문제가 있습니다. 명백한 문제를 확인할 수 없으므로 제안하십시오.

답변

1

귀하의 상태에서 usercontrolDataContext을 명시 적으로 설정하지 마십시오. MainViewModel에는 ViewModel 인스턴스 ElecViewModelStructViewModel의 두 가지 속성이 있다고 가정합니다. 그리고 MainViewModel이 그것을했다 당신은

<Expander Header="Electrical Components" Name="EC" 
        IsExpanded="True"> 
      <ItemsControl ItemsSource="{Binding ElecViewModel.ECData}"> 
      ............ 
<Expander Header="Structural Components" Name="SC" 
        IsExpanded="True"> 
      <ItemsControl ItemsSource="{Binding StructViewModel.SCData}"> 
      ............. 
+0

처럼이 확장기를 바인딩 할 수 있습니다, 당신의 WindowDataContext입니다. 내가 xaml에 몇 가지 오타 오류를하고 있었다. – simba

관련 문제