DataTemplate中的XAML访问控制

时间:2017-08-14 14:00:17

标签: c# wpf xaml data-binding

我正在尝试使用负责控制数据的ViewModel来更新我的控件。但是,我不知道如何通过我使用ListBox设置的图层来访问控件 - > ListBoxItem.ItemTemplate-> DataTemplate-> Control:

<ListBox x:Name="OrdersList" ItemsSource="{Binding Orders, Mode=TwoWay }" >
        <ListBox.ItemTemplate x:Uid="orderListBoxItemTemplate">
            <DataTemplate x:Name="orderListBoxDataTemplate">
                <materialDesign:Card Padding="20" Margin="5">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="5*"/>
                            <ColumnDefinition Width="5*"/>
                        </Grid.ColumnDefinitions>
                        <StackPanel Grid.Column="0" Margin="0 0 50 0">
                            <TextBlock Text="{ Binding OrderNumber, Mode=OneWay  }" FontSize="18" Style="{DynamicResource MaterialDesignTitleTextBlock}" />
                            <TextBlock Text="{ Binding Supplier, Mode=TwoWay  }" FontSize="18" Style="{DynamicResource MaterialDesignTitleTextBlock}" />
                            <TextBlock Text="{ Binding DeliveryDate, Mode=TwoWay  }" FontSize="18" Style="{DynamicResource MaterialDesignTitleTextBlock}" />
                            <TextBlock Text="{ Binding Note, Mode=TwoWay  }" FontSize="18" Style="{DynamicResource MaterialDesignTitleTextBlock}" />
                        </StackPanel>
                        <local:ContactView x:Name="ContactViewItem" Grid.Column="1"/>
                    </Grid>
                </materialDesign:Card>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

如何访问控件&#34; ContactViewItem&#34;无需重构我的XAML?

1 个答案:

答案 0 :(得分:0)

视图模型不应访问或甚至不了解视图中的某些控件。这打破了MVVM模式以及它的全部内容。

相反,您应该将ContactView控件的属性绑定到视图模型的属性。

如果ContactView是您的自定义控件或UserControl,您可以在其后面的代码隐藏中定义依赖项属性,并将这些属性绑定到视图模型的属性或Order类。然后你应该处理后者的任何逻辑。