小编Ada*_*ney的帖子

确保在MVVM WPF应用程序的UI线程上调用OnPropertyChanged()

在我正在使用MVVM模式编写的WPF应用程序中,我有一个后台进程可以做到这一点,但需要从UI获取状态更新.

我正在使用MVVM模式,因此我的ViewModel几乎不知道向用户呈现模型的视图(UI).

假设我的ViewModel中有以下方法:

public void backgroundWorker_ReportProgress(object sender, ReportProgressArgs e)
{
    this.Messages.Add(e.Message);
    OnPropertyChanged("Messages");
}
Run Code Online (Sandbox Code Playgroud)

在我看来,我有一个ListBox绑定到List<string>ViewModel 的Messages属性(a ). 通过调用a OnPropertyChanged来完成INotifyPropertyChanged接口的角色PropertyChangedEventHandler.

我需要确保OnPropertyChanged在UI线程上调用 - 我该怎么做?我尝试过以下方法:

public Dispatcher Dispatcher { get; set; }
public MyViewModel()
{ 
    this.Dispatcher = Dispatcher.CurrentDispatcher;
}
Run Code Online (Sandbox Code Playgroud)

然后将以下内容添加到OnPropertyChanged方法中:

if (this.Dispatcher != Dispatcher.CurrentDispatcher)
{
    this.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate
    {
        OnPropertyChanged(propertyName);
    }));
    return;
}
Run Code Online (Sandbox Code Playgroud)

但这没用.有任何想法吗?

.net wpf multithreading mvvm

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

绑定到数据网格中的命令

我在WPF应用程序中使用MV-VM模式.我将ViewModel绑定到ContentControl并使用窗口资源中定义的数据模板来呈现该ViewModel的视图(UserControl).

在ViewModel中,我有一组项目.我将该集合绑定到WPF工具包中提供的数据网格.同样在视图模型中,我定义了一个RemoveItem命令,该命令接受要删除的项ID的参数.

如何在数据网格中绑定该命令?网格的数据上下文就是那个集合,所以类似于:

<Button Command="{Binding Path=RemoveCommand}" CommandParameter="{Binding Path=id}">X</Button>
Run Code Online (Sandbox Code Playgroud)

不起作用 - 它找不到命令.我想我需要做RelativeSource绑定,但那会是什么样子?Ancestor类型是UserControl还是ContentControl?我的ViewModel作为DataContext驻留在哪里?

还是我离开这里?

.net data-binding wpf mvvm

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

如何评估在F#中存储为字符串的表达式

我想做一些像这样的事情:

let x = 5
let y = 10

let expr = Console.ReadLine()

expr
Run Code Online (Sandbox Code Playgroud)

可以"x+y"在控制台中输入以存储在expr中的位置.

如何在F#中评估这样的声明?

最终,我希望用户能够在网页上输入表达式或系统规则,并将它们保存在数据库中,以便在适当的时间在F#库中应用.我只是不知道如何将输入的字符串转换为F#中的函数值.

感谢您提供的任何帮助!

亚当

.net f#

11
推荐指数
2
解决办法
4244
查看次数

是否有(免费)3D WPF对象的工具或库?

我想在WPF中使用一些3D控件,但有点惊讶地发现WPF中没有原始的实体控件 - 我只是想在一个场景中填充几个球体和立方体,但没有意识到我必须使用网格渲染它们.

当然有人已经创建了可以添加到WPF 3D场景的3d基元库.这些图书馆中有免费的吗?

建模工具怎么样?我知道有一些免费的建模应用程序(如Blender),但是有没有办法从这些应用程序导出模型并将它们包含在WPF应用程序中?

谢谢!

.net 3d wpf graphics

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

我如何知道我的Azure表存储帐户名?

我正在尝试将Azure中的一些表存储从本地存储迁移到云.我一直在使用"devstoreaccount1"进行本地访问,但我不确定我需要在那里迁移到云端.

这不是我用来注册Azure帐户的用户帐户,不是吗?那只是我的电子邮件地址,而且似乎没有用.我也试过没有运气的项目名称.

门户中是否有任何列出此帐户名称的地方?

.net azure azure-storage

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

如何在Blend中创建样本数据集合?

假设我有一个人类:

public class Person
{
    public string Name {get; set;}
    public int Age {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我想在Blend中创建一些示例数据,以帮助我直观地设计我的用户界面.我选择基于Blend中的类创建示例数据,但我得到的是一个样本Person - singular.我想创建一个Person的集合来绑定到列表框.我怎么告诉它这样做?我找不到它要求的任何地方.我是否必须创建一个Person集合的类.当然必须有办法做到这一点?

提前致谢.

expression-blend sample-data

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

如何在我的新ASP.NET网站中使用OpenID?

我一定是个傻瓜,因为我在ASP.NET上的OpenID上看到的所有文章都让我对这个问题感到困惑.我很确定我理解这里涉及的概念,我对事情的后端方面看起来有点模糊.

因此,新用户访问我的网站并想要创建一个帐户.这里出现了大量问题:

  • 这是让他选择他将用于登录的openID提供商的第一步吗?
  • 我是否在系统上提示他输入用户名?
  • 每次他返回时我是否需要将他绑定到同一个openID提供者,或者每次他都可以选择新的提供者?
  • 这里的数据库是什么样的?我是否在表中有他的用户名并且链接到openID提供程序?
  • 如果用户没有OpenID帐户怎么办?我是否应该允许他在我的最终创建一个传统帐户,然后将自己作为OpenID提供商公开?

我在这里错过了什么?我通常都非常聪明,但对于我的开发人员智能而言,这个区域对于超人来说就像是氪星石.提前致谢!

亚当

asp.net openid

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

WPF - 集合中属性的OnPropertyChanged

在视图模型中,我有一组名为"ClassA"的项目,称为"MyCollection".ClassA有一个名为"IsEnabled"的属性.

class MyViewModel 
{
    List<ClassA> MyCollection { get; set; }

    class ClassA { public bool IsEnabled { get; set; } }
}
Run Code Online (Sandbox Code Playgroud)

我的视图有一个绑定到MyCollection的数据网格.每行都有一个按钮,其"IsEnabled"属性绑定到ClassA的IsEnabled属性.

当视图模型中的条件发生更改以使MyCollction列表中的某个特定项需要禁用时,我将IsEnabled属性设置为false:

MyCollection[2].IsEnabled = false;
Run Code Online (Sandbox Code Playgroud)

我现在想要通过OnPropertyChanged事件通知此更改的视图,但我不知道如何引用集合中的特定项目.

OnPropertyChanged("MyCollection");
OnPropertyChanged("MyCollection[2].IsEnabled");
Run Code Online (Sandbox Code Playgroud)

两者都不起作用.

如何通知查看此更改?谢谢!

.net c# wpf mvvm

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

MVVMLight EventToCommand导致内存泄漏

您好

我得到了这个xaml,我的EventToCommand连接到MVVM,这个代码的问题是导航离开它的页面总是留在内存中.

<ComboBox Grid.Column="1" Grid.Row="0" FontSize="10" 
                  SelectedIndex="{Binding Foo, Mode=TwoWay}" TabIndex="0">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectionChanged">
                    <cmd:EventToCommand Command="{Binding FooChangeCommand}"
                                        PassEventArgsToCommand="True" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
            <ComboBoxItem Content="Show Al" />               
            <ComboBoxItem Content="..." /> 
        </ComboBox>
Run Code Online (Sandbox Code Playgroud)

c# memory-leaks silverlight-4.0 mvvm-light

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