假设我们有一个叫做Dog的类,它有两个字符串"Name"和"Id".现在假设我们有一张包含4只狗的清单.如果您想更改"Id"为"2"的Dog的名称,那么最好的方法是什么?
Dog d1 = new Dog("Fluffy", "1");
Dog d2 = new Dog("Rex", "2");
Dog d3 = new Dog("Luna", "3");
Dog d4 = new Dog("Willie", "4");
List<Dog> AllDogs = new List<Dog>()
AllDogs.Add(d1);
AllDogs.Add(d2);
AllDogs.Add(d3);
AllDogs.Add(d4);
Run Code Online (Sandbox Code Playgroud) 有人可以解释View和ViewModel是如何连接的吗?我找不到引用ViewModel的View的xaml或xaml.cs,也没有找到引用View的ViewModel.cs文件中的任何内容,但它们以某种方式连接,并且从ViewModel到View的绑定成员工作.
此外,在每个的构造函数中,只有View的InitializeComponent和ViewModel的基本构造函数(没有View的声明/定义).
谢谢!
这是我第一次在C#/ .NET中做这样的事情,并且有点让我想起使用eval()函数或动态脚本和生成HTML在JavaScript中可以轻松完成的事情.我说有一个从用户输入中获取的字符串string input = "foo".现在我想使用该值"foo"作为我拥有的对象的属性名称,cover以这种方式说:
string input = "foo";
//magic to convert string value to be used
//as a object property name goes here maybe...
var success = cover.foo;
Run Code Online (Sandbox Code Playgroud)
C#中有没有办法可以做这样的事情?可能使用反射?我已经尝试了,但我总是带着一个并没有真正解决问题的对象返回.
如果你有多个属性在setter中实现相同的方法,有没有办法让它成为默认setter的一部分?
如果我有多个属性Filter()在设置时调用它,是否有办法将其推入"基本setter",这样我就不必Filter()在每个setter中都有调用?
private string _MyVal1;
public string MyVal1 {
get {
return _MyVal1;
}
set {
_MyVal1 = value;
Filter();
OnPropertyChanged("MyVal1");
}
}
private string _MyVal2;
public string MyVal2 {
get {
return _MyVal2;
}
set {
_MyVal2 = value;
Filter();
OnPropertyChanged("MyVal2");
}
}
private string _MyValN;
public string MyValN {
get {
return _MyValN;
}
set {
_MyValN = value;
Filter();
OnPropertyChanged("MyValN");
}
}
Run Code Online (Sandbox Code Playgroud)
所以它变成了这样:
private string _MyValN;
public string MyValN {
get {
return …Run Code Online (Sandbox Code Playgroud) 因为Bitmap,有一种MakeTransparent方法,有一种类似的方法可以将一种颜色改变为另一种颜色吗?
// This sets Color.White to transparent
Bitmap myBitmap = new Bitmap(sr.Stream);
myBitmap.MakeTransparent(System.Drawing.Color.White);
Run Code Online (Sandbox Code Playgroud)
有什么东西可以做这样的事吗?
Bitmap myBitmap = new Bitmap(sr.Stream);
myBitmap.ChangeColor(System.Drawing.Color.Black, System.Drawing.Color.Gray);
Run Code Online (Sandbox Code Playgroud) 我应该何时使用事件处理程序而不是事件聚合器?
在我的代码中,我有两个由父ViewModel控制的ViewModel,我试图决定是否应该使用事件处理程序在它们之间进行通信?或者使用Event Aggregator?它只是简单的方法调用,我不需要在它们之间传递参数.
如果我有两个数字表示为字符串,"100"和"200","100.1"和"200.1",我如何比较它们以查看哪一个更大?
是否有一个通用的Number.Compare(stringA,stringB)来处理数据类型?我使用数据库条目来确定验证规则,但值可能是长,小数,浮点数等,所以我不能创建一个.
我一直在使用DockManager和。LayoutRootLayoutAnchorablePaneLayoutDocumentPane
<ad:DockingManager x:Name="dockManager" >
<adLayout:LayoutRoot>
<adLayout:LayoutPanel x:Name="myLayoutPanel" Orientation="Horizontal">
<adLayout:LayoutAnchorablePane x:Name="myLayoutAnchorablePane" DockWidth="400"/>
<adLayout:LayoutDocumentPane x:Name="myDocumentPane" ChildrenCollectionChanged="myDocumentPane_ChildrenCollectionChanged"/>
</adLayout:LayoutPanel>
</adLayout:LayoutRoot>
</ad:DockingManager>
Run Code Online (Sandbox Code Playgroud)
然而,我遇到的一个问题是DockManager.LogicalChildren,当我关闭窗口时,进入 的ContentPresenter和 my永远不会被删除,并且会越来越多,直到它开始减慢应用程序的速度。UserControlLayoutDocumentLogicalChildren
当我检测到 时ChildrenCollectionChanged,如何删除与之关联的ContentPresenter和?UserControlLayoutDocument
编辑1:好的,也是LogicalChildren,System.Linq.Enumerable.WhereSelectListIterator<System.WeakReference,object>所以我无法从该列表中删除任何内容(而且它只有一个get,并且没有set)。
该LayoutDocumentPane.RemoveChild()方法不会对 执行任何操作DockingManager.LogicalChildren,因此我无法弄清楚 是LogicalChildren从哪里提取迭代日期的。
编辑2:所以,我尝试向DocumentClosing事件处理程序添加一个事件DockManager,但它似乎仍然没有LogicalChildren从 DockManager 中删除未使用的事件。
void dockManager_DocumentClosing(object sender, Xceed.Wpf.AvalonDock.DocumentClosingEventArgs e) {
UserControl uc = e.Document.Content as UserControl;
e.Cancel …Run Code Online (Sandbox Code Playgroud) 考虑以下案例:
我有另外两个继承的基类.例如,我们将:
class Base
{
}
class DerivedA : Base
{
}
class DerivedB : Base
{
}
Run Code Online (Sandbox Code Playgroud)
当我向代码请求基本实体时
context.Base.Where(q => q.Id == id).first();
实体框架为每个派生实体生成一组完整的连接,这导致低于可接受的查询性能.什么我要的是只加载基础机构没有它加入到衍生的.
我在这里找到的唯一解决方案是http://blogs.msdn.com/b/alexj/archive/2009/09/17/tip-35-how-to-write-oftypeonly-tentity.aspx.但这对我不起作用.EF仍会产生巨大的查询.
编写如下查询:
context.Base.Where(q => !(q is DerivedA) && !(q is DerivedB)).First();
Run Code Online (Sandbox Code Playgroud)
由于衍生类型的数量不断增加,也不适合我.
除了我提到的那些之外,有没有可能的解决方案?
这是我的工作代码:
string Input;
string Output;
Input = data;
Output = Input.Replace(@")", "");
Run Code Online (Sandbox Code Playgroud)
在这里,我只是从我的字符串中删除括号")",如果它存在的话.现在我如何扩展像")"这样的违规字符列表,以包括"("和" - "?
我意识到我可以写两个类似输出的语句,但我想知道是否有更好的方法......
c# ×10
wpf ×3
mvvm ×2
string ×2
.net ×1
avalondock ×1
bitmap ×1
colors ×1
generic-list ×1
numbers ×1
properties ×1
reflection ×1
setter ×1