我一直在阅读很多关于MVVM(特别是使用Laurent Bugnion的库)的文章,而且我一直在努力确定如何在MVVM中做一些事情,而这些事情在代码背后很容易实现.
这里只是一个例子,我怀疑自己正在以艰难的方式做事.如果有人有时间阅读这些内容,也许他们可以评论我的方法的合理性.:)
我有一个绑定到ViewModel的列表框,如下所示:
<ListBox x:Name="lstFruitBasketLeft" ItemsSource="{Binding FruitBasket}"
SelectedItem="{Binding SelectedFruit, Mode=TwoWay}" Width="150">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center"
HorizontalAlignment="Left" Margin="2">
<TextBlock Text="{Binding Name}" />
<TextBlock Text=":" />
<TextBlock Text="{Binding Quantity}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)
ItemSource是Fruit对象的ObservableCollection:
public class Fruit
{
public string Name { get; set; }
public int Quantity { get; set; }
public Fruit() { }
public Fruit(string name, int quantity)
{
this.Name = name;
this.Quantity = quantity;
}
}
Run Code Online (Sandbox Code Playgroud)
它在ViewModel中定义为:
// Property FruitBasket
public const string FruitBasketPropertyName = "FruitBasket"; …Run Code Online (Sandbox Code Playgroud) 这个问题 ,如果我使用GUID Membership.GetUser工作正常,但如果我尝试不带参数或名称失败:
//This works and adds records to aspnet_user & aspnet_Membership tables
MembershipUser membershipUser = Membership.CreateUser(_name, _pwd, _email, null, null, true, null, out createStatus);
//These fail with an InvalidCastException
MembershipUser membershipUser2 = Membership.GetUser(_name, true);
MembershipUser membershipUser3 = Membership.GetUser();
//If I go look up the GUID for this user (userId), this works!
MembershipUser membershipUser4 = Membership.GetUser(new Guid("E1428CD3-CF17-494E-AB77-CF8F6010F585"), true);
Run Code Online (Sandbox Code Playgroud)
其他之谜
//This works
Int32 count = Membership.GetNumberOfUsersOnline();
//this fails (but totalRecords has the right value)
Int32 totalRecords;
MembershipUserCollection col = Membership.GetAllUsers(0,100, out …Run Code Online (Sandbox Code Playgroud) .net c# asp.net-mvc exception-handling sqlmembershipprovider
为什么这不起作用?
在generic.xaml中,用于自定义控件:
在应用于自定义控件的样式中...
<Setter Property="ChromeContent">
<Setter.Value>
<Grid />
</Setter.Value>
</Setter>
Run Code Online (Sandbox Code Playgroud)
...
后来,在控件模板中......
<ContentPresenter Grid.Column="0"
x:Name="ChromeContentPresenter"
Content="{TemplateBinding ChromeContent}" />
Run Code Online (Sandbox Code Playgroud)
这是ChromeContent的依赖属性...
public Object ChromeContent
{
get { return (Object)GetValue(ChromeContentProperty); }
set { SetValue(ChromeContentProperty, value); }
}
public static readonly DependencyProperty ChromeContentProperty =
DependencyProperty.Register("ChromeContent", typeof(Object),
typeof(casPopup), null);
Run Code Online (Sandbox Code Playgroud)
如您所见,它需要任何对象.我尝试将其更改为网格,但这没有帮助.
它抛出此错误(来自javascript):_无法分配给属性'System.Windows.Controls.ContentPresenter.Content'
奇怪的是,如果我从setter中删除网格并使用文本,以下内容将正常工作:
<Setter Property="ChromeContent" Value="DEFAULT" />
Run Code Online (Sandbox Code Playgroud)
此外,这也适用于控件类中的OnApplyTemplate方法:
Grid g = new Grid();
g.Width = 100;
g.Height = 25;
g.Background = new SolidColorBrush(Colors.LightGray);
ChromeContent = g;
Run Code Online (Sandbox Code Playgroud)
我很难理解什么阻止了网格的默认内容,在generic.xaml中定义了.有没有人对此事有任何了解?
非常感谢您的帮助!
在运行Express(3.8.6)的简单节点服务器上。我正在尝试使用sendFile将简单的HTML文件发送到客户端。
我想念什么?
码
//server.js
var http = require("http");
var express = require("express");
var app = express();
var server = http.createServer(app);
var path = require('path');
//Server views folder as a static in case that's required for sendFile(??)
app.use('/views', express.static('views'));
var myPath = path.resolve("./views/lobbyView.html");
// File Testing
//--------------------------
//This works fine and dumps the file to my console window
var fs = require('fs');
fs.readFile(myPath, 'utf8', function (err,data) {
console.log (err ? err : data);
});
// Send File Testing …Run Code Online (Sandbox Code Playgroud)