小编Pet*_*ter的帖子

ObservableCollection元素转换/投影包装器

在WPF中创建ViewModel时,有时需要将ObservableCollection(源集合)中可用的数据转换为扩展/限制/投影原始元素(目标集合)的包装元素集合,同时元素的数量和顺序始终镜像原始集合.

就像Select扩展方法一样,除了它不断更新,因此可以用于WPF绑定.

如果在索引x处将元素添加到源,则会在目标集合中的相同索引x处添加相同元素的Wrapper.如果在源集合中删除了索引y处的元素,则会在目标集合中删除索引y处的元素.

说有一个ObservableCollection<ClassA>,但我需要绑定的是ReadOnlyObservableCollection<ClassB>(或等效的),其中ClassB- > ClassA如下:

class ClassB : INotifyPropertyChanged, IDisposable
{
    public ClassB(ClassA a)
    {
        Wrapped = a;
        (Wrapped as INotifyPropertyChanged).PropertyChanged+=WrappedChanged;
    }
    public ClassA Wrapped { get; private set; }
    public int SomeOtherProperty { get { return SomeFunction(Wrapped); }
    WrappedChanged(object s, NotifyPropertyChangedArgs a) { ... }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我可以自己写TemplatedTransformCollectionWrapper,我可以写这个:

ObservableCollection<ClassA> source;
TemplatedTransformCollectionWrapper theCollectionThatWillBeUsedInABinding
    = TemplatedTransformCollectionWrapper(source, classA => new ClassB(classA));
Run Code Online (Sandbox Code Playgroud)

TemplatedTransformCollectionWrapper理想地包装所有实现INotifyCollectionChanged并正确处理原始包装集合的所有可能的添加,删除和替换操作的集合.

TemplatedTransformCollectionWrapper正确编写并不是一件轻而易举的事情,它似乎是其他人已经做过的事情,也许它甚至是核心框架的一部分.但我找不到它.

.net c# wpf observablecollection inotifycollectionchanged

14
推荐指数
1
解决办法
1508
查看次数

使图像控制根据主题反转其颜色

我正在尝试研究如何让Image我的Windows Phone应用程序中的控件根据用户在Settings-> Themes-> Background中选择的全局背景设置("Dark"或"Light")反转其颜色.

silverlight windows-phone-7 windows-phone windows-phone-8

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

如何指定在用c ++编写的应用程序中使用的特定NIC(boost asio)

我有一台连接到多个独立网络的计算机,每个网络位于不同的NIC(网络接口卡)上.该机器运行Windows 7.

我在机器上运行一个应用程序,需要使用TCP通过特定的NIC连接到特定的IP.该应用程序使用c ++ 11和boost asio(1.53.0)进行联网,并且可以更改源.

在Windows环境中,有哪些不同的合理方法可以解决此问题(指定端点IP和NIC)?

当前解决方案将相应的(块)IP分配给路由表中的右侧NIC - 使用命令行"route"命令 - 作为持久路由.这样OS就可以处理问题,这是允许但不是必需的.

c++ windows routing boost boost-asio

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

是否定义了std :: seed_seq背后的算法?

seed_seq对于stl的不同实现,标准是否要求输出相同?换句话说,以下是否保证在不同的标准兼容平台上产生相同的输出?

std::seed_seq sseq = { 1701, 1729, 1791 };
std::array<unsigned int, 5> seq;
sseq.generate(seq.begin(), seq.end());
for (unsigned x : seq)
   std::cout << x << " " << std::endl;
Run Code Online (Sandbox Code Playgroud)

c++ random stl c++11

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

C# 中的高级元编程是否有一些行业“标准”?

在各种项目中,我时不时地会遇到 C# 项目中无法使用泛型解决的元编程情况,并且会受益于更强大的元编程工具。我通常采用的解决方案是通过反射解决问题、使用 C++/cli,或者引入自定义 xml/xslt 编译器步骤。

这是否反映了 C# 社区普遍采用的方法,或者是否存在我不知道的有价值的方法,例如广泛使用的第 3 方预处理器?

我不是在要求产品推荐,而是在询问针对这个常见问题的既定通用解决方案。“不,没有”可能是有效且正确的答案。

.net c# preprocessor metaprogramming

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

在Enum中填充的ListPicker中使用本地化字符串

我填充一个ListPickerEnum.例如,如果我有以下枚举:

public enum Pets 
{
    Dog,
    Cat,
    Platypus 
}
Run Code Online (Sandbox Code Playgroud)

我通过以下方式填充ListPicker:

PetListPicker.ItemsSource = Enum.GetValues(typeof(Pets));
Run Code Online (Sandbox Code Playgroud)

一切都还好,直到那里.我的ListPicker控件显示要选择的项的名称.

问题是我想将Enum项本地化,以便以不同的语言使用它们.也就是说,我希望ListPicker以应用程序当前使用的语言显示名称.

我在资源文件中有本地化字符串,我用它来本地化应用程序的其余部分.但是,我不知道如何使它与ListPicker项一起使用.

c# data-binding enums combobox windows-phone-8

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