小编rhe*_*980的帖子

检查返回值而不将其赋值给变量

我有以下代码剪切:

...
var tpc = new ThirtPartyClass();

tpc.ExecuteCommand();
tpc.ExecuteCommand();
...
Run Code Online (Sandbox Code Playgroud)

ExecuteCommand()方法返回带有一些信息的int值.对于调试,我想知道这个返回值.但我不想将结果赋给变量(var result = tpc.ExecuteCommand()).

VisualStudio 2010中是否有可能在调试期间检查此返回值而不将其分配给临时变量?

提前感谢您的建议

编辑:最后,此功能已添加到VS2013

c# debugging visual-studio-2010

9
推荐指数
1
解决办法
1688
查看次数

绑定到内部ViewModel-Property

我有一个带有ViewModel类的UserControl作为DataContext:

XAML

<UserControl x:Class="DotfuscatorTest.UserControl.View.UserControlView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" >    
<StackPanel>
  <TextBox Text="{Binding ViewModelProperty}"/>
</StackPanel>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

namespace DotfuscatorTest.UserControl.View
{
   using ViewModel;
   public partial class UserControlView
   {
      public UserControlView()
      {
         InitializeComponent();
         DataContext = new UserControlViewModel();         
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

ViewModel类:

namespace DotfuscatorTest.UserControl.ViewModel
{
   public class UserControlViewModel
   {
      private string viewModelProperty = "hello world";

      internal string ViewModelProperty
      {
        get { return viewModelProperty; }
        set { viewModelProperty = value; }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

如果我将ViewModelProperty设置为public,则绑定工作正常.但是,如果我将属性设置为内部,如上所述绑定失败(绑定错误:找不到属性...).

我认为内部属性可以在同一个程序集中像public一样访问.此外,我可以从UserControl-codebehind访问该属性没有任何问题:

{
...

((UserControlViewModel)DataContext).ViewModelProperty = "hallo viewmodel";

...
Run Code Online (Sandbox Code Playgroud)

对此行为的任何表述? …

c# data-binding wpf xaml internal

9
推荐指数
1
解决办法
6061
查看次数

Design-用于防止未分配对象的模式

我经常会收到一些关于"使用'new'表达式创建的未分配对象"的resharper警告.以下代码剪断将演示以下情况:

我正在使用一个帮助器类(Observer.cs)来监视来自另一个类(MonitoredClass.cs)的一些属性.当属性更改时,观察者类将更改的值写入另一个数据类(DataClass.cs).

剪切的简化代码:

MonitoredClass.cs:

public class MonitoredClass : INotifyPropertyChanged
{
   // simplified: in fact property calls OnPropertyChange(..)
   public string Property1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

DataClass.cs:

public class DataClass
{
   public string LastProperty1Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Observer.cs:

public class Observer
{
   private MonitoredClass _monitoredClass;
   private DataClass _dataClass;
   public Observer(MonitoredClass monitoredClass, DataClass dataClass)
   {
      _monitoredClass = monitoredClass;
      _dataClass = dataClass;
      _monitoredClass.PropertyChanged+=MonitoredClassPropertyChanged;
   }

   private void MonitoredClassPropertyChanged(..)
   {
      _dataClass.LastProperty1Value = _monitoredClass.Property1;
   }
}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

如果我现在使用上面的Observer类,如下所示: …

c# resharper design-patterns instantiation

9
推荐指数
1
解决办法
2423
查看次数

ReSharper是否正确处理Debug.Assert(..)?

我的代码我正在使用System.Function方法Debug.Assert(..)验证方法开头的输入参数(请参阅下面的示例代码剪切):

public class TestClass : IInterface
{
}

public class Verifier
  {
     public static void Verify(IInterface objectToVerify)
     {
        Debug.Assert((objectToVerify is TestClass), "Passed object must be type of TestClass");

        // ReSharper (Version 7.1.1) marks here "Expression is always false
        if (!(objectToVerify is TestClass))
        {
           return;
        }

        // do something ...
     }
  }
Run Code Online (Sandbox Code Playgroud)

如果我注释掉该Debug.Assert声明,ReSharper警告就会消失.在我看来,ReSharper必须忽略这个Debug.Assert陈述,因为如果Debug.Assert语句没有完成,则执行下面的代码(例如,在发布模式下)

你有什么意见?或者是否有其他实施方案?

c# debugging resharper assert

5
推荐指数
2
解决办法
1077
查看次数

Wix:在自定义操作中写入文件

我遇到了wix和托管自定义操作的问题:在我的自定义操作中,我创建了一个文件并将其保存在INSTALLLOCATION路径中.它似乎工作,没有抛出异常.但是在安装之后,刚刚创建的文件在INSTALLLOCATION中不存在.

维克斯 - 文件:

<CustomAction Id="SetInstallPath" Property="CreateTimeStamp" Value="[INSTALLLOCATION]"
   Execute="immediate"/>
<CustomAction Id="CreateTimeStamp" BinaryKey="SetupActions.dll"  
   DllEntry="CreateTimeStampFile" Execute="deferred" Return="check"/>
<InstallExecuteSequence>
  <Custom Action="SetInstallPath" Before="InstallFinalize"/>
  <Custom Action="CreateTimeStamp" Before="InstallFinalize"/>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

定制操作-了Methode:

...
var keys = new string[session.CustomActionData.Keys.Count];
session.CustomActionData.Keys.CopyTo(keys, 0);
var cad = keys[0];
var filepath = cad + "myfile.xml";
File.Create(filepath);
...
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?

编辑:在Scott Boettger的帖子后编辑了wix文件内容.

c# custom-action wix

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

淡出从itemscontrol中删除项目

我有一个带有ItemsControl的WPF-View,它从ViewModel绑定ObservableCollection.现在我想逐渐淡出我从ObservableCollection中删除的项目.

视图模型:

public class ViewModel
{
    public ObservableCollection<string> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

视图:

<Window x:Class="Sandbox.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"
    Name="mainWindow">
<Window.Resources>
    <DataTemplate x:Key="mytemplate">
        <DataTemplate.Resources>
            <Storyboard x:Key="OnUnloaded">
                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="grid">
                    <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
                    <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="-0"/>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="grid">
                    <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
                    <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="-10"/>
                </DoubleAnimationUsingKeyFrames>
            </Storyboard>
        </DataTemplate.Resources>
        <Grid x:Name="grid" RenderTransformOrigin="0.5,0.5">
            <Grid.RenderTransform>
                <TransformGroup>
                    <ScaleTransform/>
                    <SkewTransform/>
                    <RotateTransform/>
                    <TranslateTransform/>
                </TransformGroup>
            </Grid.RenderTransform>
            <TextBox Text="{Binding Mode=OneWay}"/>
        </Grid>
        <DataTemplate.Triggers>
            <EventTrigger RoutedEvent="FrameworkElement.Unloaded">
                <BeginStoryboard Storyboard="{StaticResource OnUnloaded}"/>
            </EventTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>
</Window.Resources>
<StackPanel>
    <ItemsControl Grid.Row="1" ItemsSource="{Binding …
Run Code Online (Sandbox Code Playgroud)

wpf datatemplate eventtrigger

4
推荐指数
1
解决办法
2289
查看次数

如何在没有代码隐藏文件的情况下移动无边界的wpf窗口

我正在创建一个带无边框窗口的WPF应用程序.应用MVVVM模式(在Caliburn.Micro的帮助下)我没有代码隐藏文件但只有一个XAML文件.

在几个帖子中我发现了以下解决方案

XAML:

<Window
   ...
   WindowStyle="None" MouseLeftButtonDown="WindowMouseLeftButtonDown"/>
Run Code Online (Sandbox Code Playgroud)

代码背后:

 private void WindowMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        DragMove();
    }
Run Code Online (Sandbox Code Playgroud)

现在我正在寻找一种解决方案,在XAML中完全定义它.

任何的想法?

c# wpf xaml mvvm caliburn.micro

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

将ProgressBar与Caliburn.micro一起使用

在我的WPF应用程序中,我试图将控件“ ProgressBar”的“ Maximum”属性与ViewModel的属性绑定(借助Caliburn.micro)。

查看(xaml):

<ProgressBar x:Name="CurrentProgress"/>
Run Code Online (Sandbox Code Playgroud)

ViewModel:

private int currentProgress;
public int CurrentProgress
{
  get { return currentProgress; }
  set
  {
    if (currentProgress == value)
    {
      return;
    }

    currentProgress = value;
    NotifyOfPropertyChange(() => CurrentProgress);
  }
}
Run Code Online (Sandbox Code Playgroud)

问题:Caliburn.micro是否有办法绑定最大值。我试图创建一个像这样的属性:

private int maximumProgress;
public int MaximumProgress
{
  get { return maximumProgress; }
  set
  {
    if (maximumProgress == value)
    {
      return;
    }

    maximumProgress = value;
    NotifyOfPropertyChange(() => MaximumProgress);
  }
}
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。我也在Caliburn文档中进行搜索,但是在那里找不到任何帮助。

谢谢你的帮助

c# wpf caliburn.micro progress-bar

4
推荐指数
1
解决办法
1440
查看次数