【问题标题】:WPF Simple dialog box without MVVM没有 MVVM 的 WPF 简单对话框
【发布时间】:2015-03-21 13:35:04
【问题描述】:

我想要一个带有文本字段的简单对话框。现在我有:

视图模型:

   public class MyViewModel
   {
       public string AA { get; set; }
   }

查看:

public partial class MyView : Window
{

    public MyView(MyViewModel context)
    {
        InitializeComponent();
        this.DataContext = context;
    }

    public string BB {get; set; }
 }

 <Window 
        ...>
      <Grid>

            <Label>name:</Label>
            <TextBox Width="110">
                <TextBox.Text>
                    <Binding Path="AA"/>
                </TextBox.Text>
            </TextBox>
            ...
       </Grid >
 </Window>

为了打开它并获取我调用的值:

   MyViewModel model = new MyViewModel();
   MyView dialog = new MyView(model);
   dialog.ShowDialog();

现在我可以从 MyViewModel AA 属性中获取提供的 TextBox 值。

是否可以将提供的值存储在 MyView BB 属性中(并因此删除 MyViewModel)?我尝试更改 xaml 配置,但无论我放什么,BB 属性始终为空。

我问的唯一原因是我的对话框只会收集这个单一的值,我希望它尽可能地精简。

【问题讨论】:

  • 你应该把dialog in a using block包装起来
  • @phadaphunk,由于 MyView 是 WPF 的 Window,它没有 Dispose 方法。调用 ShowDialog 应该足以让 Close 被调用和清理。
  • 你的意思是老式的 winforms 从对话框中返回值的方式,比如this?

标签: c# wpf


【解决方案1】:
 <Window x:Name="root"
        ...>
      <Grid>

            <Label>name:</Label>
            <TextBox Width="110" Text="{Binding BB, ElementName=root} />
            ...
       </Grid >
 </Window>

应该是您需要做的所有事情。

【讨论】:

    【解决方案2】:

    你也可以简单地替换

        this.DataContext = context;
    

    通过

        this.DataContext = this;
    

    我会把它放在 InitializeComponent 调用之前。

    但是如果你想将文本框的值存储到BB,那么你还需要设置模式:

        <TextBox Text="{Binding BB, Mode=TwoWay}"/>
    

    别忘了在你的 MyView 类中实现 INotifyPropertyChanged。

    【讨论】:

      【解决方案3】:

      你可以采取我使用的方法:Good or bad practice for Dialogs in wpf with MVVM?

      你在这里调用一个dailogservice,比如

      var result = this.uiDialogService.ShowDialog("Dialogwindow title goes here", dialogwindowVM);
      

      ...对对话结果做任何事情...

      【讨论】:

        猜你喜欢
        • 2010-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-20
        • 2020-07-27
        • 1970-01-01
        • 2011-09-09
        相关资源
        最近更新 更多