문제

XAML 에이 단순화 된 내 앱 버전이 있습니다.

<UserControl
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:uc="clr-namespace:myApp.MyControls"    
      x:Class="myApp.View.MyItem"
      x:Name="testWind"
      Width="Auto" Height="Auto" Background="White">
    <Grid x:Name="LayoutRoot">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <GroupBox x:Name="GroupBox" Header="G" Grid.Row="0">
            <WrapPanel>
                <GroupBox x:Name="GroupBox11">
                    <StackPanel Orientation="Vertical">
                        <uc:customControl1 Margin="0,4,0,0" 
                                           property1="{Binding prop1.property1}" 
                                           property2="{Binding prop1.property2}"
                                           property3="{Binding prop1.property3}"/>
                        <uc:customControl2 Margin="0,4,0,0" 
                                           property1="{Binding prop2.property1}" 
                                           property2="{Binding prop2.property2}"
                                           property3="{Binding prop2.property3}"/>
                    </StackPanel>
                </GroupBox>
            </WrapPanel>
        </GroupBox>
    </Grid>
</UserControl>

C#에서 나는 이것을 가지고있다 :

namespace MyApp.ViewModel
{
    public class MyItemViewModel
    {
        public object prop1 { get; set; }
        public object prop2 { get; set; }
    }
}

myitem.cs에서 나는 이것을한다 :

namespace MyApp.View
{
    public partial class MyItem : UserControl
    {
        public MyItem()
        {
             this.InitializeComponent();
             MyItemViewModel vm = new MyItemViewModel();
             vm.prop1 = new blah blah(); // setting properties
             vm.prop2 = new blah blah(); // setting properties
             this.DataContext = vm;
        }
    }
}

컨트롤이 너무 많으면 유지하기가 어려워 질 수 있습니다. 그래서 XAML에게 다음과 같은 일을하도록하는 방법은 다음과 같습니다.

    <uc:customControl1 Margin="0,4,0,0" DataContext="prop1"/>
    <uc:customControl2 Margin="0,4,0,0" DataContext="prop2"/>
도움이 되었습니까?

해결책

각 컨트롤에 고유 한 이름을 줄 수 있습니다

<uc:customControl1 x:Name="mycontrol1" Margin="0,4,0,0" DataContext="prop1"/>
<uc:customControl2 x:Name="mycontrol2" Margin="0,4,0,0" DataContext="prop2"/>

그런 다음 코드에서 데이터 컨텍스트를 변경할 수 있습니다.

   mycontrol1.DataContext = vm1;
   mycontrol2.DataContext = vm2;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top