在DXMessageBox中显示gridcontrol

时间:2015-05-07 00:14:22

标签: c# wpf mvvm devexpress

我有一个wpf应用程序,点击按钮"提交"将出现一个DXMessage Box,其中包含概述用户所做各种操作的摘要文本。要显示的文本太大,DXMessageBox的默认文本框宽度和高度不足以以可读格式向用户显示文本。为了克服这个问题,我在app.xaml文件中为DXMessageBox编写了自己的控件模板:

<Application.Resources>
    <ResourceDictionary>
        <ControlTemplate TargetType="{x:Type dx:DXMessageBox}" x:Key="DXMessageBoxTemplate">
            <TextBox Height=500 Width=500 Text="{Binding Path=Text, RelativeSource={RelativeSource TemplatedParent}}"/>
        </ControlTemplate>
        <Style TargetType="{x:Type dx:DXMessageBox}">
            <Setter Property="Template" Value="{StaticResource DXMessageBoxTemplate}"/>
         </Style>
    </ResourceDictionary>
</Application.Resources>

现在这个工作正常,文本自动绑定到我的视图模型类中的变量,如下所示:

string result;
DXMessageBox.Show(result);

变量&#34;结果&#34;是我从myview模型类中的数据表派生并转换为字符串的数据。

但是我的应用程序需要将整个gridcontrol显示在DXMessageBox中,所以我尝试了上述相同的方法,但是我被困在两个地方:
1)在app.xaml文件中定义的controlTemplate中,我将添加我的gridcontrol,xaml的itemsSource应该是什么,以便我的gridcontrol绑定到我的viewmodel类中声明的数据表。
2)当我在添加网格控件后调用DXMessageBox.Show方法时,传递给该方法的参数是什么。

1 个答案:

答案 0 :(得分:0)

最好使用DXDialog代替DXMessageBox来完成您的任务,因为DXMessageBox并非用于显示DXGrid等自定义内容。

使用DXDialog时,只需创建一个包含DXGrid的单独UserControl并实现所有相关的表示逻辑,并将此UserControl传递到DXDialog.Content属性:

void ShowDialog_Click_1(object sender, RoutedEventArgs e) {
    DXDialog dlg = new DXDialog("Information", DialogButtons.Ok, true);
    dlg.Content = new UserControlWithDXGrid();
    dlg.SizeToContent = System.Windows.SizeToContent.WidthAndHeight;
    dlg.Owner = this;
    dlg.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
    dlg.ShowDialog();
}

P.S。我看到您使用MVVM标记标记了此问题。因此,我相信在这种情况下,您应该使用DialogService以MVVM方式完成此任务。 请从阅读documentation开始,清楚地描述这方面所需的所有步骤。