小编teh*_*orf的帖子

如何将WPF按钮绑定到ViewModelBase中的命令?

我有一个AttributeView包含各种属性的视图.还有一个按钮,按下时,它应该为属性设置默认值.我还有一个ViewModelBase类,它是我所有ViewModel的基类.问题是我似乎无法使用WPF将命令绑定到命令.

我试过这个,但它没有做任何事情:

<Button Command="{Binding DataInitialization}" Content="{x:Static localProperties:Resources.BtnReinitializeData}"></Button>
Run Code Online (Sandbox Code Playgroud)

该命令是在(如下ViewModelBase)中定义的:

public CommandBase DataInitialization { get; protected set; }
Run Code Online (Sandbox Code Playgroud)

在应用程序启动时,为该命令创建一个新实例:

DataInitialization = new DataInitializationCommand()
Run Code Online (Sandbox Code Playgroud)

但是,WPF绑定似乎没有"找到"命令(按下按钮什么都不做).当前视图中使用的ViewModel派生自ViewModelBase.我还能尝试什么(我对WPF很新,所以这可能是一个非常简单的问题)?

c# wpf command mvvm viewmodel

47
推荐指数
1
解决办法
18万
查看次数

确保在WPF中的UI线程上运行

我正在构建一个WPF应用程序.我正在与服务器端进行一些异步通信,我在客户端上使用Prism进行事件聚合.这两件事导致产生新的线程,而不是UI线程.如果我尝试在这些回调和事件处理程序线程上执行"WPF操作",那么世界将会崩溃,现在它已经开始了.

首先,我遇到了尝试在服务器回调中创建一些WPF对象的问题.我被告知线程需要在STA模式下运行.现在我正在尝试更新Prism事件处理程序中的一些UI数据,我被告知:

调用者无法访问此线程,因为另一个线程拥有它.

所以; 在WPF中解决问题的关键是什么?我在这篇MSDN帖子中读到了WPF Dispatcher .我开始明白了,但我还没有巫师.

  1. 当我需要运行我不确定将在UI线程上调用的东西时,总是使用Dispatcher.Invoke的关键是什么?
  2. 如果它实际上是在UI线程上调用的,它是否重要,我还是做Dispatcher.Invoke?
  3. Dispatcher.Invoke =同步.Dispathcher.BeginInvoke = async?
  4. Dispatcher.Invoke会请求UI线程,然后停止等待吗?是不良做法和风险较低的程序?
  5. 我怎样才能得到调度员?Dispatcher.CurrentDispatcher会不会给我代表UI线程的调度程序?
  6. 是否存在多个Dispatcher,或者"Dispatcher"与应用程序的UI线程基本相同?
  7. 和BackgroundWorker有什么关系?我什么时候使用它呢?我认为这总是异步的?
  8. 在UI公寓模式下运行在UI线程上运行的所有内容(通过调用)吗?即如果我有需要在STA模式下运行的东西 - Dispatcher.Invoke会足够吗?

有人想帮我清理一下吗?任何相关的建议等?谢谢!

.net wpf invoke dispatcher

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

如何将自定义排序规则应用于WPF DataGrid?

当用户在我的列中进行排序时DataGrid,我希望将所有null或空单元格排序到底部,而不是顶部.

我写了一个IComparer<T>确保空白总是向下排序,但我无法弄清楚如何将它应用到我的列DataGrid.请注意,我使用LINQ 方法进行的初始排序DataGridOrderBy()有效.问题是用户执行的所有后续排序都将空白排序到顶部.

比较代码

public class BlankLastStringComparer : IComparer<string>
{
    public int Compare(string x, string y)
    {
        if (string.IsNullOrEmpty(x) && !string.IsNullOrEmpty(y))
            return 1;
        else if (!string.IsNullOrEmpty(x) && string.IsNullOrEmpty(y))
            return -1;
        else
            return string.Compare(x, y);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题

如何DataGridColumn使用我的比较器?或者,如果这不可能,您能提供解决方法吗?如果可能的话,我希望有一个MVVM友好的解决方案.

sorting wpf xaml mvvm wpftoolkit

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

如何在WPF中在1像素厚的画布上绘制一条线

我正在使用Line类在WPF中的画布上绘制,即使我设置StrokeThickness = 1,该行显示2像素宽 - 这几乎就像最小厚度是2.如何绘制真正1像素厚的线?

Line myLine = new Line();

myLine.Stroke = System.Windows.Media.Brushes.Black;

myLine.X1 = 100;
myLine.X2 = 140;  // 150 too far
myLine.Y1 = 200;
myLine.Y2 = 200;

myLine.StrokeThickness = 1;

graphSurface.Children.Add(myLine);
Run Code Online (Sandbox Code Playgroud)

c# wpf line visual-studio-2010

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

C#中面向铁路的编程 - 如何编写交换机功能?

我一直在关注这篇F#ROP文章,并决定尝试在C#中重现它,主要是为了看看我是否可以.对这个问题的长度表示歉意,但是如果你熟悉ROP,那将很容易理解.

他从一个受F#歧视的联盟开始......

type Result<'TSuccess, 'TFailure> =
  | Success of 'TSuccess
  | Failure of 'TFailure
Run Code Online (Sandbox Code Playgroud)

...我翻译成一个抽象的RopValue类,以及两个具体的实现(注意我已经将类名更改为我更了解的类名)...

public abstract class RopValue<TSuccess, TFailure> {
  public static RopValue<TSuccess, TFailure> Create<TSuccess, TFailure>(TSuccess input) {
    return new Success<TSuccess, TFailure>(input);
  }
}

public class Success<TSuccess, TFailure> : RopValue<TSuccess, TFailure> {
  public Success(TSuccess value) {
    Value = value;
  }
  public TSuccess Value { get; set; }
}

public class Failure<TSuccess, TFailure> : RopValue<TSuccess, TFailure> {
  public Failure(TFailure value) {
    Value = value;
  }
  public TFailure Value …
Run Code Online (Sandbox Code Playgroud)

c# f# functional-programming

16
推荐指数
1
解决办法
4195
查看次数

尝试在Visual Studio中调试XSLT时出现System.Xml.Xsl.CompiledQuery.Query.staticData错误

我使用Visual Studio 2010创建了一个简单的XSLT文件,它可以在我的机器上正常工作.但是,当我的同事试图在她的电脑上使用Visual Studio 2013运行它时,它通知她该文件无法运行并生成此消息:

尝试通过方法'System.Xml.Xsl.XslCompiledTransform.Load(System.Type)'访问字段'System.Xml.Xsl.CompiledQuery.Query.staticData'失败.

但是,当我在我的文件中对文本进行简单复制并将其粘贴到她的机器上的新空白XSLT文件(使用VS 2013)并使用不同的名称保存时,即使它完全相同,它也可以正常运行我原来的.好像存在一些反向兼容性问题.有没有其他人经历过这个,如果是这样,你知道任何永久性修复,所以我们不必一直复制和粘贴吗?正在从本地驱动器运行XSLT文件.

xslt visual-studio-2010 visual-studio-2013

10
推荐指数
2
解决办法
5113
查看次数

如何在 Visual Studio 2019 中执行“git checkout”?

我想返回并查看我之前发布的代码的提交。从命令行来看,它是git checkout [commit id],但我想通过 Visual Studio (2019) 来完成,这样我就不必打开命令提示符并查找/复制提交 ID。我不想对代码进行任何永久性更改,我只想能够浏览/调试旧代码。

这似乎应该是 Visual Studio 中的一个功能 - 从历史记录窗口中,我可以看到Revert, Reset,的选项Cherry-Pick,但我不认为其中任何一个是checkout. 我尝试搜索“visual studio 2019 how do I checkout a previous commit git”(以及各种措辞),但我找不到答案。

到目前为止我使用的解决方案是从我想要查看的提交中创建一个新分支,然后在完成后删除该分支,但似乎必须有更好的方法......

这是右键菜单: 提交历史右键菜单

git git-checkout visual-studio-2019

8
推荐指数
1
解决办法
5785
查看次数

可以发送/无法读取.NET串口

可能重复:
C#serialport和hyperterminal

问题

我的串口连接有问题.我可以将数据发送到我的设备,但我无法读取数据.如果我使用Hyperterm,每个工作都很好 - 我看到数据进出.

但是,使用我的代码,我的串行端口对象从不接收任何数据,但我发送的数据由设备接收.

有任何想法吗?

项目信息:

  • WPF
  • .NET 3.5(不是客户端配置文件版本)
  • 在Windows 7上开发
  • Visual Studio 2010
  • DA-15串口转USB

Hyperterm设置:

  • COM20
  • 每秒位数:115200
  • 数据位:8
  • 平价:无
  • 停止位:1
  • 流量控制:无

C#代码:

SerialPort serial = new SerialPort();

serial.PortName = "COM20";
serial.BaudRate = 115200;
serial.DataBits = 8;
serial.Parity = Parity.None;
serial.StopBits = StopBits.One;
serial.Handshake = Handshake.None;

serial.Open();
serial.Write("Hello World\r\n");    // Echoed on device screen

while (0 == serial.BytesToRead)     // Never receive a response
    System.Threading.Thread.Sleep(100);

char[] first = new char[serial.BytesToRead];
serial.Read(first, 0, first.Length);
Run Code Online (Sandbox Code Playgroud)

编辑:

我在上面注意到了,但为了确保每个人都知道,我正在使用USB转串口电缆.我不认为这是问题,因为它适用于Hyperterm,但以防万一.

c# serial-port .net-3.5

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