在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正确编写并不是一件轻而易举的事情,它似乎是其他人已经做过的事情,也许它甚至是核心框架的一部分.但我找不到它.
我正在尝试研究如何让Image我的Windows Phone应用程序中的控件根据用户在Settings-> Themes-> Background中选择的全局背景设置("Dark"或"Light")反转其颜色.
我有一台连接到多个独立网络的计算机,每个网络位于不同的NIC(网络接口卡)上.该机器运行Windows 7.
我在机器上运行一个应用程序,需要使用TCP通过特定的NIC连接到特定的IP.该应用程序使用c ++ 11和boost asio(1.53.0)进行联网,并且可以更改源.
在Windows环境中,有哪些不同的合理方法可以解决此问题(指定端点IP和NIC)?
当前解决方案将相应的(块)IP分配给路由表中的右侧NIC - 使用命令行"route"命令 - 作为持久路由.这样OS就可以处理问题,这是允许但不是必需的.
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# 项目中无法使用泛型解决的元编程情况,并且会受益于更强大的元编程工具。我通常采用的解决方案是通过反射解决问题、使用 C++/cli,或者引入自定义 xml/xslt 编译器步骤。
这是否反映了 C# 社区普遍采用的方法,或者是否存在我不知道的有价值的方法,例如广泛使用的第 3 方预处理器?
我不是在要求产品推荐,而是在询问针对这个常见问题的既定通用解决方案。“不,没有”可能是有效且正确的答案。
我填充一个ListPicker从Enum.例如,如果我有以下枚举:
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# ×3
.net ×2
c++ ×2
boost ×1
boost-asio ×1
c++11 ×1
combobox ×1
data-binding ×1
enums ×1
preprocessor ×1
random ×1
routing ×1
silverlight ×1
stl ×1
windows ×1
wpf ×1