这是一个详细说明的示例:
我在我的视图中使用ItemsControl动态创建一个简单的条形图,并将项目绑定到我的BarGraphViewModel中的BarViewModel集合(每个包含一个值的百分比).每个酒吧应该有不同的颜色.颜色应该从一个集合中选择,例如{Color1, Color2, ..}
集合本身是不变的,但条数将取决于具体情况.
一个简单的解决方案是创建一个简单的BarViewModel,如下所示:
public class BarViewModel
{
public int Percentage { get; set; }
public SolidColorBrush Stroke { get; private set; }
public BarGraphViewModel(SolidColorBrush stroke)
{
Stroke = stroke;
}
}
Run Code Online (Sandbox Code Playgroud)
(为了简洁,我省略了属性更改和验证实现)
现在我可以从我的BarGraphViewModel为每个百分比创建一个BarViewModel,并传入从我的Color集合创建的相应ColorBrush.
然后在Xaml中我将创建一个简单的ItemsTemplate,它将绑定到这些属性.
只有现在,因为它包含一个SolidColorBrush类型的属性,我的ViewModel依赖于Presentation框架,如果我想在另一个环境中使用它,它将不得不被更改.
这是否会打破MVVM最佳实践,或者它是否可以接受(你必须在某处绘制线条或者事情变得太复杂)
我只是想看看其他人对此的看法,以及是否有其他解决方案让ViewModel完全不了解Presentation Layer而不会太复杂.我可以想象ValueConverters可以提供帮助吗?
今天我遇到了NUnit的以下问题.
我有一个类,派生自泛型类.我开始做一些序列化测试,并使用NUnit的Is.EqualTo()函数测试相等性.
当一个应该失败的测试通过时,我开始怀疑出现了问题.当我使用obj1.Equals(obj2)而不是它应该失败时.
为了调查我创建了以下测试:
namespace NUnit.Tests
{
using Framework;
public class ThatNUnit
{
[Test]
public void IsNotEqualTo_ClientsNotEqual_Passes()
{
var client1 = new DerrivedClient();
var client2 = new DerrivedClient();
client1.Name = "player1";
client1.SomeGenericProperty = client1.Name;
client2.Name = "player2";
client2.SomeGenericProperty = client2.Name;
Assert.That(client1.Equals(client2), Is.False);
Assert.That(client1, Is.Not.EqualTo(client2));
}
[Test]
public void IsNotEqualTo_ClientsAreEqual_AlsoPasses_SomethingWrongHere()
{
var client1 = new DerrivedClient();
var client2 = new DerrivedClient();
client1.Name = "player1";
client1.SomeGenericProperty = client1.Name;
client2.Name = client1.Name;
client2.SomeGenericProperty = client1.Name;
Assert.That(client1.Equals(client2), Is.True);
Assert.That(client1, Is.Not.EqualTo(client2));
}
}
public class …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Javascript(Nodejs)应用程序与Python应用程序进行通信.
我使用绑定到我的localhost和特定端口的套接字工作.
为了使事情更简单(例如,当部署到可能不允许我在多个端口上侦听的环境时),我想改变我的实现以使用绑定到文件描述符的套接字.
我搜索了高低,但我找到的所有例子都使用了端口.
基本上我需要来自Nodejs文档(指定路径的版本)的此示例的Python服务器计数器部分:
var client = net.connect({path: '/tmp/echo.sock'}.
有人可以提供一个简单的例子来展示,创建和绑定文件描述符套接字并在其上处理数据和/或指向正确的方向吗?
我正在尝试下载html文件中包含的所有png文件.我很难捕获404状态异常,而我的程序只是崩溃了.
以下是一些示例:
import Network.HTTP.Conduit
import qualified Data.ByteString.Lazy as L
main = do
let badUrl = "http://www.google.com/intl/en_com/images/srpr/WRONG.png"
imgData <- (simpleHttp badUrl) `catch` statusExceptionHandler
L.writeFile "my.png" imgData
statusExceptionHandler :: t -> IO L.ByteString
statusExceptionHandler e = (putStrLn "oops") >> (return L.empty)
Run Code Online (Sandbox Code Playgroud)
我的"oops"消息从不打印,而是应用程序崩溃:
StatusCodeException(Status {statusCode = 404,statusMessage ="Not Found"})[("Content-Type","text/html; charset = UTF-8"),("X-Content-Type-Options","nosniff "),("日期","星期五,2012年1月27日03:10:34 GMT"),("服务器","sffe"),("内容长度","964"),("X-XSS -Protection","1; mode = block")]
我究竟做错了什么?
更新:
根据Thoma的建议,我将代码更改为以下代码段,现在已经适当地处理了异常处理.
main = do
let badUrl = "http://www.google.com/intl/en_com/images/srpr/WRONG.png"
imgData <- (simpleHttp badUrl) `X.catch` statusExceptionHandler
case imgData of x | x == L.empty -> …Run Code Online (Sandbox Code Playgroud) 我想根据日志级别,主题等更改日志消息输出到终端的颜色.
我发现在Haskell中执行此操作的唯一记录器是xmonad-contrib包的一部分,但我不想依赖它,因为它相当大.
我知道Yesod会记录颜色,但对于我如何使其记录器在Yesod Web应用程序之外工作并不明显.
我查看了hslogger,它看起来与System.Log.Logger非常相似,但似乎都没有开箱即用的颜色支持.
hslogger可以通过自定义扩展LogHandlers,所以可能有人实现了一个有颜色支持?
到目前为止,Haskell的登录是否有其他选择?
编辑:
根据Don Stewart的建议,我实现了一个与hslogger和ansi-c一起使用的自定义日志处理程序,以便允许以颜色登录终端.
假设我有classA,其中包含classB,两者都是[Serializable].
我假设,在反序列化中,classB将首先被反序列化.
但事实并非如此,因为我可以通过记录每个[OnDeserialized]方法被击中来确认.
现在我有以下问题:
在classA的反序列化完成后,它应该使用classB中的值进行自我设置.不幸的是,此时尚未对classB进行反序列化,因此classA设置错误.
我的问题将得到解决,如果我可以强制BinaryFormatter在classA之前反序列化classB,或者将对象图从底部到顶部而不是从上到下解析.
另一个明显的解决方案是让classB在反序列化时激活一个事件然后让classA自行设置,但我想远离这个非优雅的解决方法.
如果有人知道更好的解决方案,我将不胜感激.
我一直在使用Prism一段时间,并享受解耦我的模块更容易.
这对视图和视图模型特别有用,因为您可以通过接口注入视图模型,并通过区域管理器注入视图.
不幸的是,这只适用于我的观点是完全成熟的用户控件,除非我在这里遗漏了一些东西(我真诚地希望我是).
很多时候,我会创建一个ViewModel和一个匹配的DataTemplate.然后,其他程序集可以使用它们来组成视图.
我的问题是,在没有引用包含程序集的情况下,我看不到引用这些datatemplates的方法,所以在我的xaml文件中我写了类似的东西:
<ResourceDictionary Source="pack://application:,,/......>
Run Code Online (Sandbox Code Playgroud)
当然,这并没有真正解耦,虽然我试图确保,我没有在我的代码中的任何其他地方引用程序集.
我想到的另一个解决方案是将datatemplates放入Infrastructure项目中,但我也不太喜欢,因为我希望包含属于模块的所有东西(当然除了接口).
那么,有没有人有一个很好的解决方法,或者我是否错过了一些Prism功能?
我目前正在F#中实现一个Spec框架,我希望在我的should类型上隐藏Equals,GetHashCode等方法,这样API就不会混杂在一起.
我知道在C#中它是通过使类实现这样的接口来完成的:
using System;
using System.ComponentModel;
public interface IFluentInterface
{
[EditorBrowsable(EditorBrowsableState.Never)]
bool Equals(object other);
[EditorBrowsable(EditorBrowsableState.Never)]
string ToString();
[EditorBrowsable(EditorBrowsableState.Never)]
int GetHashCode();
[EditorBrowsable(EditorBrowsableState.Never)]
Type GetType();
}
Run Code Online (Sandbox Code Playgroud)
我尝试在F#中做同样的事情:
type IFluentInterface = interface
[<EditorBrowsable(EditorBrowsableState.Never)>]
abstract Equals : (obj) -> bool
[<EditorBrowsable(EditorBrowsableState.Never)>]
abstract ToString: unit -> string
[<EditorBrowsable(EditorBrowsableState.Never)>]
abstract GetHashCode: unit -> int
[<EditorBrowsable(EditorBrowsableState.Never)>]
abstract GetType : unit -> Type
end
Run Code Online (Sandbox Code Playgroud)
在我的类型中实现它:
interface IFluentInterface with
member x.Equals(other) = x.Equals(other)
member x.ToString() = x.ToString()
member x.GetHashCode() = x.GetHashCode()
member x.GetType() = x.GetType()
Run Code Online (Sandbox Code Playgroud)
但没有成功.
我也试图覆盖我的类型中的方法并以这种方式添加属性,但这也没有做到. …
我试图将WPF选项卡控件的选定选项卡项与已添加的最后一项同步.
由于没有这样的财产如IsSynchedWithLastAddedItem,我想的时候,为了在最后加一个点的SelectedItem加入一个项目检测.
当添加TabItem时,我找不到引发的事件 - 在选项卡控件或其Items上.
我确信它必须存在,但我希望有人可以帮助我.
我试图实现同样的目标sudo chmod 755 myfile.
我发现getPermissions和setPermissions在System.Directory,但只允许我为当前用户设置权限(在我的情况根).
是否存在适用于所有用户的等效功能,或者是使用rawSystem呼叫的唯一可行选项,我认为这有点不干净?