不带 MVVM 的“WPF 简单”对话框



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

视图模型:

   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 属性中获取提供的文本框值。

是否可以将提供的值存储在 MyView BB 属性中(从而删除 MyViewModel)?我试图更改 xaml 配置,但没有我放在那里的 BB 属性始终为空。

我问的唯一原因是我的对话框只会收集这个单一值,我想让它尽可能薄。

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

应该是你需要做的一切。

您也可以简单地替换

    this.DataContext = context;

    this.DataContext = this;

我会把它放在初始化组件调用之前。

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

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

并且不要忘记在MyView类中实现INotifyPropertyChanged。

你可以采用我使用的aprroach:使用MVVM的wpf中的对话框的好或坏做法?

在这里,您调用像这样的 dailog服务

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

。对对话框结果执行任何操作...

最新更新