小编lok*_*ing的帖子

ViewModel中的INotifyPropertyChanged与DependencyProperty

在Model-View-ViewModel体系结构WPF应用程序中实现ViewModel时,似乎有两个主要选择如何使其成为databindable.我已经看到了DependencyProperty用于View将要绑定的属性的实现,我已经看到了实现的ViewModel INotifyPropertyChanged.

我的问题是我应该何时优先选择其中一个?有任何性能差异吗?将ViewModel依赖项提供给WPF真的是个好主意吗?做出设计决定时还需要考虑什么?

architecture data-binding wpf dependency-properties mvvm

349
推荐指数
9
解决办法
7万
查看次数

如何在WPF中获取控件以填充可用空间?

Button如果你没有指定它的高度,一些WPF控件(比如)似乎很乐意消耗它'容器中的所有可用空间.

还有一些,比如我现在需要使用的那些,(多线)TextBox而且ListBox似乎更担心只需占用适合其内容所需的空间,而不是更多.

如果你将这些人放在一个单元格中UniformGrid,它们将扩展以适应可用空间.但是,UniformGrid实例并不适合所有情况.如果你有一个网格,其中一些行设置为*高度,以划分自身与其他*行之间的高度,该怎么办?如果你有一个StackPanel,你有a Label,a List和a Button,你怎么能得到列表占据标签和按钮没有吃掉的所有空间怎么办?

我认为这确实是一个基本的布局要求,但我无法弄清楚如何让它们填充他们可以填充的空间(将它们放入并将其DockPanel设置为填充也不起作用,似乎,因为在DockPanel只占用其子控件所需的空间).

一个可调整大小的GUI将是相当可怕的,如果你有一起玩Height,Width,MinHeight,MinWidth等.

你可以绑定你HeightWidth属性,以你占据网格单元?或者还有另一种方法吗?

wpf layout user-interface

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

WPF用户控制父级

我有一个用户控件,我MainWindow在运行时加载.我无法从包含窗口获取句柄UserControl.

我试过了this.Parent,但它总是空的.有谁知道如何从WPF中的用户控件获取包含窗口的句柄?

以下是控件的加载方式:

private void XMLLogViewer_MenuItem_Click(object sender, RoutedEventArgs e)
{
    MenuItem application = sender as MenuItem;
    string parameter = application.CommandParameter as string;
    string controlName = parameter;
    if (uxPanel.Children.Count == 0)
    {
        System.Runtime.Remoting.ObjectHandle instance = Activator.CreateInstance(Assembly.GetExecutingAssembly().FullName, controlName);
        UserControl control = instance.Unwrap() as UserControl;
        this.LoadControl(control);
    }
}

private void LoadControl(UserControl control)
{
    if (uxPanel.Children.Count > 0)
    {
        foreach (UIElement ctrl in uxPanel.Children)
        {
            if (ctrl.GetType() != control.GetType())
            {
                this.SetControl(control);
            }
        }
    }
    else
    {
        this.SetControl(control);
    } …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf

180
推荐指数
9
解决办法
15万
查看次数

WPF TreeView HierarchicalDataTemplate - 绑定到具有多个子集合的对象

我试图TreeView绑定我的集合,以便所有组显示嵌套组,每个组将显示条目.

我如何使用HierarchicalDataTemplateTreeView来处理子组和条目集合?

组显示子组和条目:

Example:
Group1
--Entry
--Entry
Group2
--Group4
----Group1
------Entry
------Entry
----Entry
----Entry
--Entry
--Entry
Group3
--Entry
--Entry
Run Code Online (Sandbox Code Playgroud)


对象:


namespace TaskManager.Domain
{
    public class Entry
    {
        public int Key { get; set; }
        public string Name { get; set; }
    }
}

namespace TaskManager.Domain
{
    public class Group
    {
        public int Key { get; set; }
        public string Name { get; set; }

        public IList<Group> SubGroups { get; set; }
        public IList<Entry> Entries …
Run Code Online (Sandbox Code Playgroud)

c# wpf treeview xaml hierarchicaldatatemplate

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

async(void)方法摘要:返回什么内容?

这可能是一个微不足道的问题,但目前我正在为未来的同事做一些内联文档,并偶然发现了类似的事情:

/// <summary>
/// This Class is totaly useless
/// </summary>
public class DummyClass {

  /// <summary>
  /// Will do nothing
  /// </summary>
  public void DoNothing() {
  }

  /// <summary>
  /// Will do nothing async
  /// </summary>
  /// <returns></returns> <---- What to write here?
  public async Task DoNothingAsync() {
    await Task.Run(() => { });
  }

}
Run Code Online (Sandbox Code Playgroud)

您可能知道,在Method/Field/Class/whatever上方键入3个斜杠会触发VisualStudio执行其Summary-Snippet-Completion.

Task实际上是一个有效的返回值?如果是这样,我会写什么<returns></returns>

我当然知道,我可以忽略这一点,但为了完整起见我愿意在那里写东西.

c# visual-studio async-await

26
推荐指数
2
解决办法
2178
查看次数

实体框架将导航属性设置为null

我有一个实体框架数据库第一个项目.这是模型的提取:

public partial class LedProject
{
    public LedProject()
    {
        this.References = new HashSet<LedProjectReference>();
        this.Results = new HashSet<LedProjectResult>();
        this.History = new HashSet<LedProjectHistory>();
    }

    public string Identifier { get; set; }
    public string Name { get; set; }
    public Nullable<System.DateTime> CompletionDate { get; set; }
    public System.DateTime CreationDate { get; set; }
    public System.Guid ProjectId { get; set; }
    public string Comment { get; set; }

    public virtual User ContactUser { get; set; }
    public virtual User CreationUser { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework

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

WPF MVVM DataBindings停止更新

我正在使用MVVM模式的中型WPF应用程序.ViewModels用于INotifyPropertyChanged刷新各自的视图.

这种方法很有效,除了一个问题:当这个应用程序长时间运行(3-7天)时,视图(整个应用程序中的每个视图!)突然停止更新它们的绑定属性.

如果我在ViewModels中设置一个断点,那么它们就会快乐地走开,呼唤PropertyChanged就像没有错.但是,如果我在View绑定的ViewModel对象的getter中设置断点,则永远不会调用getter!

我很难过,甚至不知道如何正确调试这个问题.我已检查Visual Studio输出窗口是否存在数据绑定错误,但一切看起来都很正常.几乎就像WPF数据绑定引擎在后台崩溃一样.此应用程序还监视未处理的异常(AppDomain.UnhandledExceptionDispatcher.UnhandledException),但不会抛出任何异常.

简介:经过很长一段时间后,Views停止更新其数据绑定,但ViewModel仍在调用PropertyChanged事件.

任何建议???

c# data-binding wpf mvvm inotifypropertychanged

20
推荐指数
1
解决办法
1310
查看次数

MVVM:如何处理嵌套的ViewModel之间的交互?

我一直在试验经常提到的MVVM模式,在某些情况下我很难定义清晰的界限.在我的应用程序中,我有一个对话框,允许我创建到Controller的连接.对话框有一个ViewModel类,这很简单.但是,该对话框还包含一个附加控件(由a选择ContentTemplateSelector),该控件根据所连接的控制器的特定类型而变化.此控件具有自己的ViewModel.

我遇到的问题是,当我按OK键关闭对话框时,我需要实际创建请求的连接,这需要在内部Controller特定的ViewModel类中捕获的信息.简单地让所有特定于Controller的ViewModel类实现构建连接的公共接口是很诱人的,但是内部ViewModel是否应该真正负责这种构造?

我的一般问题是:是否有任何普遍接受的设计模式可用于ViewModel如何与彼此进行交互,特别是当"父"VM需要来自"子"VM的帮助以便知道该怎么做?


编辑:

我确实想出了一个比我原先想的更清洁的设计,但我仍然不确定这是否是'正确'的方法.我有一些后端服务,允许ContentTemplateSelector查看Controller实例并伪魔术地找到要为连接构建器显示的控件.让我烦恼的是,我的顶级ViewModel必须查看DataContext生成的控件并将其转换为适当的界面,这似乎是一个坏主意(为什么View DataContext与创建连接有关? ?)

我结束了这样的事情(简化):

public interface IController
{
    IControllerConnectionBuilder CreateConnectionBuilder();
}

public interface IControllerConnectionBuilder
{
    ControllerConnection BuildConnection();
}
Run Code Online (Sandbox Code Playgroud)

我有我的内部ViewModel类实现IControllerConnectionBuilder,Controller返回内部ViewModel.顶级ViewModel然后可视化IControllerConnectionBuilder(通过伪魔法机制).它仍然困扰我一点,这是我的内部ViewModel执行构建,但至少现在我的顶级ViewModel不必知道脏细节(它甚至不知道或不关心可视化控件正在使用视图模型).

如果有办法进一步清理这个问题,我欢迎提出更多想法.我仍然不清楚ViewModel对于它有多大的责任.

c# architecture mvvm

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

DataGridView在开头没有选定的行

在我的WinForms中,我有DataGridView.我想一次选择完整行,所以我设置SelectionModeFullRowSelect.现在我有问题,因为在开始时我的表单为第一行加下划线(所选行的集合为空,第一行未选中但仅加下划线).我尝试了很多东西,比如:

    private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
        dataGridView1.ClearSelection();
    }
Run Code Online (Sandbox Code Playgroud)

一切都失败了,因为事实上没有选择.

我该怎样摆脱这个下划线?

谢谢你的帮助!

.net c# datagridview winforms

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

在Windows Phone 8.1上添加防火墙规则

我真的不知道如何寻找我想要实现的目标.我将添加两张图片,以更好的方式向您展示我在这里所做的事情.

在此输入图像描述

在此输入图像描述

正如您所看到的,我在防火墙中添加了一个阻止规则,该规则将阻止特定应用程序的一系列地址(第二个图像的第一个规则).

有没有办法在Windows手机上做类似的事情?我不是在寻找一些代码或任何东西.只是为了一些指导.我应该在哪里看?我应该寻找什么?Windows手机没有防火墙,我不想使用任何外部防火墙应用程序,如果有...

c# firewall ip-address windows-phone-8.1

13
推荐指数
1
解决办法
629
查看次数