通过绑定更改子视图

发布于 2024-12-07 21:30:48 字数 1025 浏览 0 评论 0原文

可能的重复:
更改 ViewModel 的视图

我有一个视图:

<UserControl ...>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <ComboBox ItemSource="{Binding Items}" />
        **<???>**
    </Grid>
</UserControl>

我有 ViewModel:

public class VM
{
    // ...
    public List<Entities> Items { get; set;}
    public String Title { get; set; }
}

并且我有一些这样的子视图:

<UserControl ...>
    <TextBlock Text="{Binding Title}" />
</UserControl>

当用户从主视图中的 ComboBox 中选择一些值时,我需要放置在第二列中 主视图的一些子视图。如果用户在ComboBox中选择其他值,则另一个subView将替换现有的subView

怎么办呢?

Possible Duplicate:
Changing the View for a ViewModel

I have a view:

<UserControl ...>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <ComboBox ItemSource="{Binding Items}" />
        **<???>**
    </Grid>
</UserControl>

I have ViewModel:

public class VM
{
    // ...
    public List<Entities> Items { get; set;}
    public String Title { get; set; }
}

and I have a few subview's like this:

<UserControl ...>
    <TextBlock Text="{Binding Title}" />
</UserControl>

When user selecta some value from ComboBox in main View, I need to place in second column
of main View some of subViews. If user selects other value in ComboBox, another subView sould replace existing subView.

How can it be done?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

初相遇 2024-12-14 21:30:48

我通常只使用 ContentControl 并让它根据 DataTemplates 确定要绘制哪个视图

<ContentControl Content="{Binding SelectedView}">
    <ContentControl.Resources>
        <DataTemplate DataType="{x:Type local:ViewModelA}">
            <local:ViewA />
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:ViewModelB}">
            <local:ViewB />
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:ViewModelC}">
            <local:ViewC />
        </DataTemplate>
    </ContentControl.Resources>
</ContentControl>

I usually just use a ContentControl and let it figure out which view to draw based on DataTemplates

<ContentControl Content="{Binding SelectedView}">
    <ContentControl.Resources>
        <DataTemplate DataType="{x:Type local:ViewModelA}">
            <local:ViewA />
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:ViewModelB}">
            <local:ViewB />
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:ViewModelC}">
            <local:ViewC />
        </DataTemplate>
    </ContentControl.Resources>
</ContentControl>
冷血 2024-12-14 21:30:48

您可以绑定到 ComboBoxSelectedItem,例如,

<ComboBox x:Name="cb" ItemSource="{Binding Items}" />
<ContentControl Content="{Binding SelectedItem, ElementName=cb}" Grid.Column="1">
    <ContentControl.ContentTemplate>
        <DataTemplate>
            <v:SubView /> <!-- Bind properties as appropriate -->
        <DataTemplate>
    <ContentControl.ContentTemplate>
<ContentControl>

如果您有不同的视图,请使用 ContentTemplateSelector 而不是硬编码一个模板。

You could bind to the SelectedItem of the ComboBox, e.g.

<ComboBox x:Name="cb" ItemSource="{Binding Items}" />
<ContentControl Content="{Binding SelectedItem, ElementName=cb}" Grid.Column="1">
    <ContentControl.ContentTemplate>
        <DataTemplate>
            <v:SubView /> <!-- Bind properties as appropriate -->
        <DataTemplate>
    <ContentControl.ContentTemplate>
<ContentControl>

If you have differnt views use the ContentTemplateSelector instead of hardcoding one template.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文