小编Edw*_*uay的帖子

你是如何在MVVM中成功实现MessageBox.Show()功能的?

我有一个WPF应用程序,它在ViewModel中调用MessageBox.Show()方式(以检查用户是否真的要删除).这实际上是有效的,但是违背了MVVM,因为ViewModel不应该明确地确定View上发生了什么.

所以现在我在想如何在我的MVVM应用程序中最好地实现MessageBox.Show()功能,选项:

  1. 我可以收到一条短信,上面写着"你确定......?" 以及我的XAML中的边框中的两个按钮是和否全部,并在模板上创建一个触发器,使其基于名为AreYourSureDialogueBoxIsVisible的ViewModelProperty折叠/可见,然后当我需要此对话框时,将AreYourSureDialogueBoxIsVisible指定为"true" "还可以通过我的ViewModel中的DelegateCommand处理这两个按钮.

  2. 我也可以尝试用XAML中的触发器来处理这个问题,这样删除按钮实际上只会使一些Border元素出现,其中包含消息和按钮,而Yes按钮实际上是删除了.

对于曾经使用MessageBox.Show()的几行代码而言,这两种解决方案似乎都过于复杂.

您在哪些方面成功实现了MVVM应用程序中的Dialogue Box?

wpf triggers messagebox mvvm

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

在PHP Web应用程序中保存配置变量的最佳方法是什么?

我经常在.NET和PHP开发之间切换.使用ASP.NET站点,我在web.config文件中保存配置信息(例如连接字符串,目录,应用程序设置),该文件受到适当保护并且易于访问值等.

PHP中,我用一个为每个变量都有静态方法类来解决这个问题:

class webconfig {
    public static function defaultPageIdCode() {
        return 'welcome';
    }
}
Run Code Online (Sandbox Code Playgroud)

app变量包含的文件是通过一行访问的:

$dp = webconfig::defaultPageIdCode();
Run Code Online (Sandbox Code Playgroud)

而且由于PHP没有编译,因此很容易telnet并更改网站的值,所以这个解决方案工作得相当好,并给我这两个优点:

  • 我可以不破坏与应用程序的接口的情况下为配置变量添加逻辑
  • 这些配置变量在我的Eclipse,NetBeans等中显示为intellisense.

但我可以想象,人们可以通过其他方式解决在PHP中保存Web配置设置的问题,这可能具有其他优势.

特别是那些有许多PHP框架经验的人,还有哪些方法可以保存配置变量及其优缺点?

php configuration

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

Visual Studio:热键可以向上/向下移动线并移动最近的更改

我正在从Eclipse迁移到Visual Studio .NET,除了两个以外,我找到了所有我心爱的热键:

  • 在Eclipse中,您可以按ALT- ALT- 访问您最近所做的更改,我经常使用的内容返回到我在其他文件中的位置,然后返回.显然,在VS.NET的CTRL- -CTRL- SHIFT- -做到这一点,但他们似乎并不总是工作(如笔记本电脑,可能是一个numkey问题与负),似乎没有遵循"我在那里同样的算法"正如我在Eclipse中习惯的那样.有没有人得到这个工作,每天依赖它等等?
  • 在Eclipse中,要向上或向下移动一行,按ALT- uparrowALT- downarrow然后你只需将它移动到代码中,直到你将它移到你想要的地方,非常好.也使一个行的副本,您可以按SHIFT- ALT- uparrowSHIFT- - .ALT downarrow这两个热键甚至适用于您选择的行块.

有没有人在Visual Studio .NET中发现这些热键功能?

附录:

您将使用上述第二个功能的一个示例是将底线向上移动到for循环中.在Eclipse中,您可以将光标放在Console.WriteLine上然后按ALT-(uparrow),我会一直使用它:一个键行程来上下移动行.

for (int i = 0; i < 10; i++) {

}
Console.WriteLine(i);
Run Code Online (Sandbox Code Playgroud)

好的,用无选择ctrl-c推断Charlie的想法来选择一行,在Visual Studio中你可以将光标放在Console.WriteLine上,(无选择)按CTRL- X然后向上移动并按CTRL- V.

eclipse hotkeys visual-studio

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

在XAML样式中,如何将实体背景更改为渐变?

我有一个MainResources.xaml文件,其中我有一个样式,定义我的应用程序中的每个窗口的外观:

  <Style x:Key="MainBorderStyle" TargetType="{x:Type Border}">
    <Setter Property="Background" Value="WhiteSmoke" />
    <Setter Property="BorderBrush" Value="LightGray" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="CornerRadius" Value="5" />
    <Setter Property="SnapsToDevicePixels" Value="True" />
  </Style>
Run Code Online (Sandbox Code Playgroud)

而不是"WhiteSmoke"我希望我的背景是这个渐变:

    <LinearGradientBrush>
        <GradientStop Color="#ccc" Offset="0"/>
        <GradientStop Color="#bbb" Offset="1"/>
    </LinearGradientBrush>
Run Code Online (Sandbox Code Playgroud)

但是下面的尝试导致VS2008告诉我"样式设置器不支持子元素":

<Style x:Key="MainBorderStyle" TargetType="{x:Type Border}">
    <Setter Property="Background">
        <LinearGradientBrush>
            <GradientStop Color="#ccc" Offset="0"/>
            <GradientStop Color="#bbb" Offset="1"/>
        </LinearGradientBrush>
    </Setter>
    <Setter Property="BorderBrush" Value="LightGray" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="CornerRadius" Value="5" />
    <Setter Property="SnapsToDevicePixels" Value="True" />
</Style>
Run Code Online (Sandbox Code Playgroud)

将渐变色作为此样式的背景的正确方法是什么?

wpf xaml styles

40
推荐指数
1
解决办法
5万
查看次数

如何在安装SQL Server R2 Express时修复"性能计数器注册表配置单元一致性"?

我正在尝试从此站点安装SQL Server 2008 R2 Express:

http://www.microsoft.com/express/database/

我有一台64位的Windows 7机器.

我已经尝试了32位和64位版本,但每个版本都失败了"性能计数器注册表配置单元一致性".

我该如何解决这个问题,以便安装SQL Server 2008 R2 Express?

替代文字

sql-server install sql-server-express

40
推荐指数
5
解决办法
12万
查看次数

如何使用PHPExcel自动读取计算值?

我有以下Excel文件:

替代文字

我通过循环遍历每个单元格并获取值来读取它getCell(...)->getValue():

$highestColumnAsLetters = $this->objPHPExcel->setActiveSheetIndex(0)->getHighestColumn(); //e.g. 'AK'
$highestRowNumber = $this->objPHPExcel->setActiveSheetIndex(0)->getHighestRow();
$highestColumnAsLetters++;
for ($row = 1; $row < $highestRowNumber + 1; $row++) {
    $dataset = array();
    for ($columnAsLetters = 'A'; $columnAsLetters != $highestColumnAsLetters; $columnAsLetters++) {
        $dataset[] = $this->objPHPExcel->setActiveSheetIndex(0)->getCell($columnAsLetters.$row)->getValue();
        if ($row == 1)
        {
        $this->column_names[] = $columnAsLetters;
        }
    }
    $this->datasets[] = $dataset;
}
Run Code Online (Sandbox Code Playgroud)

但是,虽然它读取的数据很好,但它在字面上读入了计算:

替代文字

我从像这样的讨论中理解我可以getCalculatedValue()用于计算细胞.

问题是在我导入的Excel工作表中,我事先不知道哪些单元格是计算的,哪些不是.

有没有办法让我以一种自动获取值的方式读取单元格的值,如果它有一个简单的值,并获得计算的结果,如果它是一个计算?

回答:

事实证明,这getCalculatedValue()适用于所有单元格,让我想知道为什么这不是默认值,getValue()因为我认为人们通常会想要计算的值而不是方程本身,无论如何这都有效:

...->getCell($columnAsLetters.$row)->getCalculatedValue();
Run Code Online (Sandbox Code Playgroud)

替代文字

php phpexcel

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

MVVM是否违反DRY?

似乎我制作的ViewModels看起来像其他类一样可疑,它们似乎需要大量的代码重复,例如在我当前的项目中:

  • SmartForm:表示要填充的数据表单的模型,具有以下属性:
    • IDCODE
    • 标题
    • 描述
    • SmartFormFields的集合
    • 等等
  • SmartFormControlView 视图
  • SmartFormControlViewModel ViewModel
    • IDCODE
    • 标题
    • 描述
    • SmartFormFields的集合
    • 等等

因此,我的ViewModel与我的模型基本相同,只是具有与View绑定的所有OnPropertyChanged功能.

似乎我重构并扩展了我对模型所做的每一点改变,我必须对 ViewModel 进行镜像更改.

这似乎违反了模式的基本规则不要重复自己.

我是否错误地实现了MVVM模式,或者它只是MVVM的固有特性,模型和ViewModel之间始终存在一对一的重复?

wpf design-patterns mvvm

39
推荐指数
1
解决办法
2214
查看次数

如何在XAML中定义和使用变量来定义颜色?

我的XAML中有许多元素,它们将前景="#555"定义为只读文本框中淡化文本的颜色.

<TextBlock Text="{Binding SingularModelClassFileTitle}" Margin="0 10 0 0"/>
<TextBox Text="{Binding SingularModelClassFileName}"
         HorizontalAlignment="Left"
         IsReadOnly="True"
         Foreground="#555"
         Width="500"/>
<TextBox 
 VerticalScrollBarVisibility="Visible"
 AcceptsReturn="True"                  
 Width="500" 
 Height="100" 
 IsReadOnly="True" 
 Foreground="#555"
 Text="{Binding SingularModelClassContent}"
 HorizontalAlignment="Left"
 Margin="0 0 0 20"/>
Run Code Online (Sandbox Code Playgroud)

如何将此值放在XAML变量中并在每个属性中引用它,以便我只需要在一个位置更改它?

我想你可以做这样的事情:

<sys:String x:Key="ReadOnlyTextColor">#555</sys:String>

...

    <TextBox Foreground="{StaticResource ReadOnlyTextColor}"/>
Run Code Online (Sandbox Code Playgroud)

那个属性xmlns:sys=...参考是什么?

wpf xaml

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

什么是WPF Datagrid的"按下删除键"事件?

我想让用户突出显示WPF DataGrid上的一行,然后按删除键删除该行.

  • 该功能已内置于网格的UI中,因此对用户而言,该行将消失
  • 我目前在SelectionChanged事件上处理这个问题(下面的代码)
  • 我遍历所有"e.RemovedItems"并用LINQ删除它们

问题是:即使您只是选择一行并离开它,也会触发选择更改,并且该行位于e.RemovedItems中(这很奇怪,为什么只是选择将它放在RemovedItems容器中?).

所以我正在寻找一个DeleteKeyPressed事件,所以我可以简单地处理它.那个事件叫什么?

我使用的是2009年3月的工具包.

XAML:

<Grid DockPanel.Dock="Bottom">
    <toolkit:DataGrid x:Name="TheDataGrid" 
                      SelectionChanged="TheDataGrid_SelectionChanged"
                      AutoGenerateColumns="True"
                      RowEditEnding="TheDataGrid_RowEditEnding"/>
Run Code Online (Sandbox Code Playgroud)

后台代码:

private void TheDataGrid_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
    if (e.RemovedItems.Count > 0)
    {
        Message.Text = "The following were removed: ";
        foreach (object obj in e.RemovedItems)
        {
            Customer customer = obj as Customer;
            Message.Text += customer.ContactName + ",";
            _db.Order_Details.DeleteAllOnSubmit(
                customer.Orders.SelectMany(o => o.Order_Details));
            _db.Orders.DeleteAllOnSubmit(customer.Orders);
            _db.Customers.DeleteOnSubmit(customer);
        } 
    }

    try
    {
        _db.SubmitChanges();
    }
    catch (Exception …
Run Code Online (Sandbox Code Playgroud)

wpf datagrid

35
推荐指数
3
解决办法
4万
查看次数

35
推荐指数
1
解决办法
2万
查看次数