小编Jas*_*n D的帖子

MVVM Light Messenger - 发送和注册对象

有人能够给我一个如何使用MVVM Light的Messenger在类之间发送和注册自定义对象的示例,或者指向一个涵盖此内容的教程(最好是一个具体示例)吗?我一直在尝试使用Messenger将项目中的对象传递给另一个类,但我从来没有成功过.我在网上看了一些例子,但没有找到任何能告诉我需要的东西.谢谢.

mvvm mvvm-light

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

MVVM - Model或ViewModel中的PropertyChanged?

我已经完成了一些MVVM教程,我已经看到了这两种方式.大多数人使用ViewModel for PropertyChanged(这是我一直在做的),但我遇到了一个在模型中做到这一点.两种方法都可以接受吗 如果是这样,不同方法的好处/缺点是什么?

c# mvvm

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

自动刷新ICollectionView过滤器

是否有任何方法可以自动更新过滤器,ICollectionView而无需Refresh()在进行相关更改时进行调用?

我有以下内容:

[Notify]
public ICollectionView Workers { get; set; }
Run Code Online (Sandbox Code Playgroud)

此属性中的[Notify]属性刚刚实现,INotifyPropertyChanged但在这种情况下它似乎没有做任何事情.

Workers = new CollectionViewSource { Source = DataManager.Data.Workers }.View;

Workers.Filter = w =>
    {
        Worker worker = w as Worker;
        if (w == null)
            return false;
        return worker.Employer == this;
    };
Run Code Online (Sandbox Code Playgroud)

在XAML中:

<TextBlock x:Name="WorkersTextBlock"
           DataContext="{Binding PlayerGuild}"
           FontFamily="Pericles"
           Text="{Binding Workers.Count,
                          StringFormat=Workers : {0},
                          FallbackValue=Workers : 99}" />
Run Code Online (Sandbox Code Playgroud)

更新:看起来使用ICollectionView对我来说是必要的,所以我想重新审视这个主题.我正在为这个问题添加一笔赏金,其收件人将是任何能够提供有关如何实现ICollectionView不需要手动刷新的"不干涉"的洞察力的人.在这一点上,我对任何想法持开放态度.

c# wpf icollectionview

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

实现ICollectionViewLiveShaping

任何人都可以帮我正确实现ICollectionViewLiveShaping过滤目的吗?关于这个问题,我没有在网上找到很多有用的文档.这就是我所拥有的:

public ICollectionView WorkersEmployed { get; set; }

WorkersEmployed = new CollectionViewSource { Source = GameContainer.Game.Workers }.View;
Run Code Online (Sandbox Code Playgroud)

我没有使用,GetDefaultView因为我需要在此集合上有多个过滤器实例.如果重要,那GameContainer.Game.Workers就是ObservableCollection.

ApplyFilter(WorkersEmployed);

private void ApplyFilter(ICollectionView collectionView)
{
    collectionView.Filter = IsWorkerEmployed;
}

public bool IsWorkerEmployed(object item)
{
    Worker w = item as Worker;
    return w.EmployerID == this.ID;
}
Run Code Online (Sandbox Code Playgroud)

这一切都有效,但当然必须手动刷新,这就是我尝试使用的原因ICollectionViewLiveShaping.我能找到的最好的例子就是这个,但不幸的是我仍然无法让它发挥作用.鉴于我在这里有什么,任何人都可以给我一个正确的方向,让实时过滤工作?

任何帮助将不胜感激.

出于好奇,这真的是一项艰巨的任务吗?如果是这样的话,设计人员似乎ICollectionViewLiveShaping做得很糟糕.

更新:看来,只有这样,才能增加一个属性LiveFilteringPropertiesICollectionViewLiveShaping通过字符串收集.鉴于这种限制,是否可以按另一个类中的属性进行过滤(在本例中为Workers'EmployerID)?

任何有经验的人都能GetDefaultView告诉我,在这种情况下我想做什么甚至是一个可行的选择吗?老实说我不知道​​是不是因为缺乏文档和可用的例子.即使这是不可行的,也至少知道我是否在浪费时间.

c# icollectionview

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

绑定WPF中的Setter属性的值

我整天都在寻找一种方法来显示一个默认的文本字符串,ComboBox并且我设法找到最接近的工作是一个使用水印的示例.当我的应用程序打开时,其ComboBoxVisibility属性设置为Collapsed,然后通过命令显示.不幸的是,我无法让水印效仿.这是我正在使用的:

<Style x:Key="watermarkLabelStyle">
    <Setter Property="TextBlock.Foreground" Value="Black" />
    <Setter Property="FrameworkElement.Opacity" Value="0.8" />
    <Setter Property="TextBlock.FontSize" Value="12" />
    <Setter Property="TextBlock.FontStyle" Value="Italic" />
    <Setter Property="TextBlock.Margin" Value="8,4,4,4" />
    <Setter Property="TextBlock.Visibility" Value="{Binding Visible}" />
</Style>
Run Code Online (Sandbox Code Playgroud)

{Binding Visible} 即使窗口中的其他控件绑定到它并且行为正常,也没有任何效果.

<ComboBox ItemsSource="{Binding LeagueFormatsNode}"
          x:Name="leagueFormatComboBox"
          Grid.Column="0"
          Grid.Row="1"
          Grid.ColumnSpan="3"
          ScrollViewer.CanContentScroll="False"
          HorizontalContentAlignment="Stretch"
          Visibility="{Binding Visible}"
          Behaviors:WatermarkComboBoxBehavior.EnableWatermark="True"
          Behaviors:WatermarkComboBoxBehavior.Label="Select League Format"
          Behaviors:WatermarkComboBoxBehavior.LabelStyle="{StaticResource watermarkLabelStyle}" /> 
Run Code Online (Sandbox Code Playgroud)

Visibleviewmodel中的属性:

public Visibility Visible
{
    get { return _visibile; }
    set
    {
        if (_visibile == value)
            return;
        _visibile = value;
        RaisePropertyChanged(() => Visible);
    } …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml

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

当我们尝试将Snoop附加到我们的应用程序时,为什么Snoop会导致WPF崩溃?

当我在我的WPF应用程序上运行Snoop时,我的应用程序崩溃了,我收到一条错误消息"检测到BindingFailure".错误的详细信息是:

The assembly with display name 'Snoop.XmlSerializers' failed to load in the 'LoadFrom' binding context of the AppDomain with ID 1. The cause of the failure was: System.IO.FileNotFoundException: Could not load file or assembly 'Snoop.XmlSerializers, Version=2.8.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

以前有人遇到过这个问题吗?我不知道是什么导致了它.

c# wpf snoop

7
推荐指数
1
解决办法
1722
查看次数

从ObservableCollection继承的集合 - 有什么好处?

在查看这篇MSDN文章之后,我现在想知道将集合定义为继承的类的好处是什么(如果有的话)ObservableCollection.这之间是否有任何显着差异:

class MyCollection : ObservableCollection<MyObject> { }

class Class1
{
    private MyCollection _newCollection = new MyCollection();

    public Class1()
    {
        _newCollection.Add(new MyObject());
    }
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

class Class1
{
    private ObservableCollection<MyObject> _newCollection = new ObservableCollection<MyObject>();

    public Class1()
    {
        _newCollection.Add(new MyObject());
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么东西我在这里俯瞰吗?

c#

7
推荐指数
1
解决办法
5235
查看次数

在VS 2013中使用空格键提交C++ Intellisense建议

在使用C#专门用了很长时间之后,我最近一直在探索C++.我正在使用Visual Studio 2013,而让我感到烦恼的一件事就是无法通过按空格键来提交Intellisense建议.我试图在选项 - >文本编辑器 - > C/C++ - >高级中编辑提交字符列表以接受空格键,但到目前为止我没有运气.来自C#,这是非常恶化的.有人知道是否可以做出这样的改变?我知道我可以使用Tab或Enter,但在我看来,使用Space更加流畅.

任何信息将不胜感激.

更新:空间似乎提出了一些建议,但没有提出其他建议.如果我输入"std :: stri",它会提交"std :: string".不幸的是,Intellisense不会提交由我创建的任何内容甚至是普通关键字.它只是在我输入的内容后添加了一个空格.

c++ intellisense visual-studio visual-studio-2013

7
推荐指数
1
解决办法
1959
查看次数

MVVM Light&WPF - 将Window的多个实例绑定到ViewModel

我正在研究MVVM中的第一个项目,我选择使用MVVM Light Toolkit.我有一个GameViewModel在我的游戏主屏幕上处理业务.我需要找到如何在执行命令时将AdventurerView一个实例Adventurer作为参数打开一个新窗口(),绑定它AdventurerViewModel,并显示和返回数据.此窗口的实例将经常打开和关闭.我已经被困在这几天了,这让我发疯了.我想学习如何以MVVM友好的方式执行此操作,最好使用MVVM Light或纯XAML提供的工具.

我尝试过使用MVVM Light,ViewModelLocator但由于AdventurerView它是一个窗口,它将无法工作; 虽然程序仍在编译和运行,但它说"不能把窗口放在一个样式中".我可以改变一些东西让它起作用吗?或者是否有另一种方法在XAML中绑定它们?或完全是另一种方法?我真的很想能够继续前进.我也试过使用MVVM Light的信使无济于事(仍然没有解决View/ViewModel问题).

我只需要能够创建一个绑定的窗口AdventurerViewModel并显示/返回相应的数据.

AdventurerView.xaml目前处于默认状态,但我觉得如果我可以绑定可能有用的相应数据(DataContext).

AdventurerViewModel也很简单

class AdventurerViewModel : ViewModelBase
{
    #region Members

    private Adventurer _adv;

    #endregion

    #region Properties

    public Adventurer Adv
    {
        get { return _adv; }
        set { _adv = value; }
    }

    #endregion

    #region Construction

    public AdventurerViewModel(Adventurer adv)
    {
        this._adv = adv;
    }

    #endregion
}
Run Code Online (Sandbox Code Playgroud)

App.xaml底部有非工作的DataTemplate:

<Application StartupUri="MainWindow.xaml"
         xmlns:views="clr-namespace:AoW.Views"
         xmlns:vm="clr-namespace:AoW.ViewModels" 
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         x:Class="AoW.App" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         mc:Ignorable="d">

<Application.Resources>
    <vm:ViewModelLocator …
Run Code Online (Sandbox Code Playgroud)

c# wpf mvvm mvvm-light

6
推荐指数
1
解决办法
9629
查看次数

相同的ListViews显示不同 - 列不会在一个上拉伸

我遇到了一个奇怪的问题.我正在显示一个UserControl内部UserControl,此刻每个都包含一个完全相同的内容ListView,就像我从一个复制并粘贴到另一个中一样.在父级上UserControl,ListView显示正确,但在子级UserControl(无论它叫什么)上,ListView列拒绝拉伸以适合其内容.我不知道为什么会发生这种情况,因为两个ListViews 的代码完全相同.两者都直接放在网格上.

在此输入图像描述

左上角是ListView父控件,右下角是子控件.这是两个ListViews 的代码:

<ListView ItemsSource="{Binding Adventurers}"
              Name="AdvListView"
              HorizontalAlignment="Stretch"
              Grid.Column="2"
              Grid.ColumnSpan="1"
              Grid.Row="2"
              ScrollViewer.CanContentScroll="False"
              BorderThickness="3">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick">
                <cmd:EventToCommand Command="{Binding ShowAdvWindowCommand}"
                                    CommandParameter="{Binding ElementName=AdvListView, Path=SelectedItem}"
                                    PassEventArgsToCommand="False" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                <Setter Property="VerticalContentAlignment" Value="Stretch" />
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.Resources>
            <DataTemplate x:Key="NameTemplate">
                <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding Name}" VerticalAlignment="Center" TextTrimming="CharacterEllipsis" />
            </DataTemplate>
            <DataTemplate x:Key="StatusTemplate">
                <TextBlock Margin="2,1,1,1" Text="{Binding Status}" VerticalAlignment="Center" /> …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml listview

6
推荐指数
1
解决办法
249
查看次数