没有MVVM的WPF简单对话框

时间:2015-01-22 16:46:51

标签: c# 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属性中获取提供的TextBox值。

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

我要问的唯一原因是我的对话框除了收集这一个值之外什么也不做,我想尽可能地保持它。

3 个答案:

答案 0 :(得分:0)

 <Window x:Name="root"
        ...>
      <Grid>

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

应该就是你需要做的一切。

答案 1 :(得分:0)

您也可以直接替换

    this.DataContext = context;

通过

    this.DataContext = this;

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

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

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

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

答案 2 :(得分:0)

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

在这里你可以调用像

这样的对话服务
var result = this.uiDialogService.ShowDialog("Dialogwindow title goes here", dialogwindowVM);

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