相关疑难解决方法(0)

如何使用NAMED内容创建WPF UserControl

我有一组带有附加命令和逻辑的控件,它们以相同的方式不断重用.我决定创建一个包含所有常用控件和逻辑的用户控件.

但是我还需要控件才能保存可以命名的内容.我尝试了以下方法:

<UserControl.ContentTemplate>
    <DataTemplate>
        <Button>a reused button</Button>
        <ContentPresenter Content="{TemplateBinding Content}"/>
        <Button>a reused button</Button>
    </DataTemplate>
</UserControl.ContentTemplate>
Run Code Online (Sandbox Code Playgroud)

但是,似乎无法命名放置在用户控件内的任何内容.例如,如果我以下列方式使用控件:

<lib:UserControl1>
     <Button Name="buttonName">content</Button>
</lib:UserControl1>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

无法在元素"Button"上设置Name属性值"buttonName".'Button'属于元素'UserControl1'的范围,在另一个范围内定义时,已经注册了一个名称.

如果我删除buttonName,然后编译,但我需要能够命名内容.我怎样才能做到这一点?

c# wpf xaml user-controls controls

90
推荐指数
2
解决办法
4万
查看次数

仅在视图(不是窗口)上的WPF MVVM模态覆盖对话框

我对MVVM架构设计很陌生......

我最近一直在努力寻找一个已经为此目的编写的合适的控件,但没有运气,所以我从另一个类似的控件中重用了部分XAML并自己制作了.

我想要实现的是:

有一个可重用的View(usercontrol)+ viewmodel(要绑定到),以便能够在其他视图中使用作为模式覆盖,显示禁用视图其余部分的对话框,并在其上显示一个对话框.

在此输入图像描述

我是如何实现它的:

  • 创建一个视图模型,它接受字符串(消息)和动作+字符串集合(按钮)
  • viewmodel创建一组调用这些操作的ICommands
  • 对话框视图绑定到其视图模型,该视图模型将作为另一个视图模型(父级)的属性公开
  • 对话框视图被放入父级的xaml中,如下所示:

pseudoXAML:

    <usercontrol /customerview/ ...>
       <grid>
         <grid x:Name="content">
           <various form content />
         </grid>
         <ctrl:Dialog DataContext="{Binding DialogModel}" Message="{Binding Message}" Commands="{Binding Commands}" IsShown="{Binding IsShown}" BlockedUI="{Binding ElementName=content}" />
      </grid>
    </usercontrol>
Run Code Online (Sandbox Code Playgroud)

因此,模态对话框从Customer视图模型的DialogModel属性获取datacontext,并绑定命令和消息.它也会绑定到对话框显示(绑定到IsShown)时需要禁用的其他元素(此处为'content').当您单击对话框中的某个按钮时,将调用关联的命令,该命令只调用在viewmodel的构造函数中传递的关联操作.

这样我就可以从Customer视图模型中调用对话框视图模型上的对话框的Show()和Hide(),并根据需要更改对话框视图模型.

它会一次只给我一个对话但是没问题.我还认为对话框视图模型将保持单一性,因为单元测试将涵盖在构造函数中使用Actions创建后应该创建的命令的调用.对话框视图会有几行代码隐藏,但很少而且非常愚蠢(setter getters,几乎没有代码).

我关心的是:

这个可以吗?我有什么问题可以进入吗?这会破坏一些MVVM原则吗?

非常感谢!

编辑:我发布了我的完整解决方案,以便您可以更好地了解.欢迎任何建筑评论.如果您看到一些可以纠正的语法,则帖子会被标记为社区维基.

c# wpf mvvm wpf-controls

28
推荐指数
2
解决办法
3万
查看次数

标签 统计

c# ×2

wpf ×2

controls ×1

mvvm ×1

user-controls ×1

wpf-controls ×1

xaml ×1