假设我们有一个ItemsControl,它与一个源有关.两者之间是否有任何性能差异
ItemsControl.DataContext = resultSet;
Run Code Online (Sandbox Code Playgroud)
和
ItemsControl.ItemsSource = resultSet;
Run Code Online (Sandbox Code Playgroud)
(在两种情况下都在XAML中正确绑定)
我需要方法,Add()和Update(),它们都创建一个datacontext并返回创建/更新的对象.
在我的单元测试中,我先调用Add(),做一些东西,然后调用Update().问题是Update()失败并出现异常:
System.Data.Linq.DuplicateKeyException: Cannot add an entity with a key that is already in use..
Run Code Online (Sandbox Code Playgroud)
我理解这个问题,但想知道该怎么办呢?我已经阅读了一些关于如何处理多个datacontext对象的内容,并且从我听到过这种方式是可以的.
我知道实体仍然附加到Add()中的datacontext但我需要找出如何解决这个问题?
提前致谢
我有一个ASP.NET MVC 2动作,如下所示:
public ActionResult Index()
{
using(var db = new MyDataContext())
{
var welcomeSnippet = "test";
var articles = db.Posts.Where(p => p.DateOfPublish <= DateTime.Now).Take(5).ToList();
return View(new HomeViewModel()
{
Articles = articles,
WelcomeSnippet = welcomeSnippet
});
}
}
Run Code Online (Sandbox Code Playgroud)
该视图包含以下代码:
<%foreach (var item in Model.Articles)
{%>
<div class="article" id="<%=item.PostID %>">
<!-- some properties -->
<div class="tags">tags: <i><%foreach (var tag in item.PostTags.ToList())
{ %><%=Html.Encode(tag.Tag.TagName.Trim())%> <%} %></i>
</div>
</div>
<% } %>
Run Code Online (Sandbox Code Playgroud)
我正在访问item.PostTags
,这是通过我的DataContext获得的.在这里,我基本上使用延迟加载,但是我收到一个错误:我的DataContext已经在列出那些PostTag时被处理掉了.
在处理DataContext之前如何加载这些数据?
我正在开发我的第一个Silverlight 4应用程序,并且正在努力如何以类型安全的方式将我的MainPage.xaml中的顶部元素(网格)上的DataContext集合共享到基础UserControl中.DataContext是我的ViewModel类的一个实例,我的想法是能够将UserControl中的某些元素绑定到ViewModel的属性.
我很确定ViewModel对象会冒泡到我的UserControl但是我怎么能在UserControl中确保DataContext的类型为PatternCreatorViewModel?
希望这是可以理解的!
在这个问题我问了一下添加TabItems
动态到TabControl
的ItemsSource
来自ObservableCollection<Village>
..我的问题是,如果添加一个按钮,任何TabItem
,此按钮将有DataContext
其容器的TabItem
,我怎么能实现此按钮的Click事件?
我昨天开始运行这个庞大的系统.成千上万的人同时连接..我正在使用SQL Server 2008和.NET 3.5(C#);
今天我注意到我的数据库服务器变得非常慢(顺便说一句,服务器机器确实能够轻松地处理10x这个应用程序,所以我必须弄乱我的连接或其他东西).
首先:My Business类分别创建了一个DataContext.在课堂上,像这样:
public class BusProduct : IDisposable
{
//DataContext
DBDataContext db = new DBDataContext();
//Variable of type DAL.Products (that will be set on application level)
public Products _attributes { get; set; }
//Dispose
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
}
/// Constructor
public BusProduct()
{
try
{
//New object
_attributes = new Product();
}
catch (Exception ex)
{
throw new Exception(ex.Message,ex);
}
} …
Run Code Online (Sandbox Code Playgroud) 我有一个ObservableCollection<Widget>
上NotifyCollectionChangedAction.Add
执行context.Widget.InsertOnSubmit(addedWidget)
.
在我执行之前,我context.SubmitChanges()
需要删除一个已添加的项目,因为它不再需要,但是仍然可能有一些项目context.GetChangeSet().Inserts
仍然需要插入.
是否可以取消特定的插入/删除而不丢弃DataContext并重新开始?
在MVVM模式中,可以接受甚至可以在后面的视图代码中访问ViewModel属性吗?
我有一个可观察的集合,它在ViewModel中填充.我需要在视图中使用它来绑定带有链表的无尽的自动收报机.即
private LinkedList<Border> tickerForex = new LinkedList<Border>();
public ForexBuy()
{
InitializeComponent();
DataContext = new ForexViewModel();
}
private void InitializeForexTicker()
{
CanvasForexBuyTicker.Children.Clear();
foreach (var currency in DataContext.Currencies) //Is this possible/allowable???
{
AddTickerItem(currency);
}
CanvasForexBuyTicker.Dispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(delegate
{ var node = tickerForex.First;
while (node != null)
{
if (node.Previous != null)
{
Canvas.SetLeft(node.Value, Canvas.GetLeft(node.Previous.Value) + node.Previous.Value.ActualWidth + gap);
}
else
{
Canvas.SetLeft(node.Value, CanvasForexBuyTicker.Width + gap);
}
node = node.Next;
}
return null;
}), null);
}
void AddTickerItem(Currency currency)
{
Border border …
Run Code Online (Sandbox Code Playgroud) 在我的MainWindow中,我创建了一个包含不同设置的类的新实例.设置类的参数后,我将datacontext =设置为该类.
public partial class MainWindow : Window
{
private MeasConSettings mMeasConSettings = new MeasConSettings();
public MainWindow()
{
InitializeComponent();
DataContext = mMeasConSettings;
}
private void MenuComm_Click(object sender, RoutedEventArgs e)
{// See code below}
}
Run Code Online (Sandbox Code Playgroud)
现在我还有一个打开一个新窗口的函数,这个窗口包含一个文本框,其文本应绑定到MainWindow的datacontext.
private void MenuComm_Click(object sender, RoutedEventArgs e)
{
FrmSettings newWindow = new FrmSettings();
newWindow.DataContext = mMeasConSettings;
newWindow.TxtComm.Text = mMeasConSettings.CommSettings;
newWindow.Show();
}
Run Code Online (Sandbox Code Playgroud)
此代码使用正确的内容填充newWindow的文本框,但由于在更改文本框中的文本(新创建的窗口中的TxtComm)后datacontext未更新,因此它不会受到限制.
文本框的XAML代码示例:
<TextBox Grid.Row="1" Grid.Column="3" Margin="2,0" Name="TxtComm" DataContext="{Binding Path=CommSettings, UpdateSourceTrigger=PropertyChanged}" />
Run Code Online (Sandbox Code Playgroud)
"CommSettings"是MeasConsettings类的成员
public class MeasConSettings
{
private string mCommSettings;
public string CommSettings
{
get
{ …
Run Code Online (Sandbox Code Playgroud) 我被告知在MVVM中为视图设置DataContext的最佳方法是使用DataTemplate.所以我试图通过使用DataTemplate将MainWindow的DataContext设置为MainWindowViewModel的实例.
我一直无法弄清楚如何.
我已经尝试将ResourceDictionary放在不同的地方(在App.xaml中,在Window.Resources标签中......)
我用谷歌搜索无济于事.这就是我所拥有的......(它不起作用,但在这里它是)
App.xaml中:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
Dictionary1.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DataTemplateTesting" >
<DataTemplate DataType="{x:Type local:MainViewModel}">
<local:MainWindow/>
</DataTemplate>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)
MainViewModel.cs
namespace DataTemplateTesting
{
public class MainViewModel
{
public MainViewModel() { }
}
}
Run Code Online (Sandbox Code Playgroud)
我做的唯一另一件事是为MainWindow添加一个处理程序,用于DataContextChanged事件,所以我可以看到它是否曾被激活......它没有.
任何想法如何解决这一问题??
编辑:这里没有任何东西无法生成,但是......这里是MainWindow代码.
MainWindow.xaml
<Window x:Class="DataTemplateTesting.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:DataTemplateTesting"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525"
DataContextChanged="Window_DataContextChanged" >
<Grid>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
MainWindow.xaml.cs
namespace DataTemplateTesting
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{ …
Run Code Online (Sandbox Code Playgroud) datacontext ×10
c# ×6
wpf ×5
linq-to-sql ×3
asp.net ×1
asp.net-mvc ×1
class-design ×1
data-binding ×1
database ×1
datatemplate ×1
itemssource ×1
linq ×1
performance ×1
silverlight ×1
viewmodel ×1
window ×1