当最外层控件的DataContext发生更改时,我遇到了使用ItemSources的嵌套控件的问题.内部控件似乎更新以反映新的DataContext,但它有一些"Ghost"绑定仍然绑定到旧的DataContext.
我怀疑拥有DataTemplates的嵌套控件会阻止内部控件的绑定在外部控件的DataContext更改时更新.我在某处读到只有绑定才响应从PATH中明确定义的对象引发的PropertyChanged事件.
我的问题是:如何使用ItemsSources从nexted控件中完全定义绑定PATH?就我而言:
<DataGrid name="OuterGrid" ItemsSource={Binding SelectedSchool.Classes}">
<ItemsControl ItemsSource={Binding Students}">
<ComboBox SelectedItem={Binding Grade}" />
</ItemsControl>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
我想完全指定内部ComboBox的SeletedItem PATH,类似于以下内容,但是我需要将它绑定到集合中的特定项(而不仅仅是索引0处的那个).
<ComboBox SelectedItem="{Binding ElementName=OuterGrid,
Path=DataContext.SelectedSchool.Classes[0].Students[0].Grade}" />
Run Code Online (Sandbox Code Playgroud)
我在下面有一个更详细的问题示例,我无法发布实际代码或描述我正在使用的ACTUAL对象(安全原因),所以我试图用最简单的方式来理解它.
我有一个相当复杂的Biz对象,其中包含其他对象的集合.集合中的项目也包含集合.
每个类(包括我的ViewModel)都实现了INotifyPropertyChanged,每个集合都是一个ObservableCollection.
我的ViewModel具有以下特性:
这里要注意的重要一点是,不同的学校可能有不同的可能成绩(即一个可能有A +,A和A-而另一个只有A).
我有一个Datagrid绑定到我的ViewModel的AllSchools集合和ViewModel的SelectedSchool属性.当用户双击一行时,事件处理程序通过更改ViewModel的IsEditing属性(编辑面板的Visibily绑定到IsEditing属性)打开所选学校的"编辑面板".在编辑面板中,我有一个Datagrid(绑定到所选学校的Classes集合),在Datagrid内部我有一个带有ItemsControl的TemplatedColumn(绑定到当前Class的学生的集合).每个学生都有一个ComboBox,用于学生在课堂上的成绩.ComboBox的ItemsSource是ViewModel的PossibleGrades集合.
问题在于,当SelectedSchool发生变化时,之前在SelectedSchool中的任何学生,其字母成绩不适用于新选择的学校,突然将其成绩设置为null(因为ComboBox的ItemsSource不再具有成绩) .
在视觉上,一切似乎都很好.编辑面板正确显示所选学校的属性,并在SelectedSchool属性更改时更新.但是如果我重新打开第一所学校的编辑面板,那么组合框中没有一个选择了值,因为当我选择第二所学校时它们都被设置为null.
它就像旧的ComboBoxes仍然有他们的Bindings连接,即使他们不再出现在屏幕上.但是,如果只影响以前的SelectedSchool(不是之前的那个).
简短的问题
有没有一种方法可以以编程方式下载构建/发布解决方案所需的所有 Nuget 包并将它们输出到可以移动到本地 Nuget 存储库的单个目录中?
一些背景
在我工作的地方,大多数开发都是在气隙网络(没有互联网)上完成的。在最近的一个项目中,我能够在我们的支持互联网的网络上进行开发。这恰好是第一个在支持 Internet 的网络上开发的应用程序,也是我们开发的第一个 ASP.NET Core 应用程序。该解决方案可以在面向互联网的网络上正常构建、运行和发布。我现在正在尝试将解决方案移至气隙网络,但在移走所有依赖项时遇到问题。
起初,由于缺少 ASP.NET Core nuget 包,该解决方案无法构建;因此,我将用于开发应用程序的计算机上的本地缓存中的所有 nuget 包复制到气隙网络上的本地 Nuget 存储库。现在应用程序已构建,但我似乎无法发布Web 项目(ASP.NET Core)。我收到了 25 个以上的错误:
- 无法找到包runtime.any.System.Diagnositics.Tools。源中不存在具有此 id 的包...
- 无法找到版本 (>= 2.1.6) 的 Nicrosoft.NETCore.App...
- 无法找到...
当我尝试从 Visual Studio(使用 IIS Express)运行时,我还收到运行时错误“无法显示此页面”,但我不确定这是否是相关问题。单元/集成测试运行良好。
我可以尝试从 Nuget.org手动下载每个 nuget 包并将它们移动到气隙网络,但需要几个小时才能将内容从一个网络移动到另一个网络。无论如何,我是否可以自动检索构建/发布解决方案所需的所有 nuget 包,以便我可以从一个网络到另一个网络进行单次传输,而不是移动我拥有的内容并等待查看发生了什么问题?最好我想要一个 exe 或 PowerShell 脚本,它可以查看 sln 文件并将所有必要的 nuget 包放入指定的目录中。
我正在尝试创建一个 .Net 标准“客户端”类,用于将(有时非常大)文件上传到控制器。我想通过将文件分成块并一次上传一个来做到这一点。目的是让其他应用程序使用它而不是直接与 Web Api 通信。
我已经让控制器工作了。我已经验证它可以使用支持块保存的 Kendo-ui 控件工作。
我遇到的问题是,IEnumerable<IFormFile> files从我的客户端类发布时,我的控制器的参数始终为空
控制器
[Route("api/Upload")]
public ActionResult ChunkSave(IEnumerable<IFormFile> files, string metaData, Guid id)
{
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(metaData));
var serializer = new DataContractJsonSerializer(typeof(ChunkMetaData));
ChunkMetaData somemetaData = serializer.ReadObject(ms) as ChunkMetaData;
// The Name of the Upload component is "files"
if (files != null)
{
// If this is the first chunk, try to delete the file so that we don't accidently
// and up appending new bytes to the old …Run Code Online (Sandbox Code Playgroud) 背景
我有一个多层应用程序,我试图重构.我的数据层本质上只是一个EF数据库上下文(及其所有实体).我想要实现的目标之一是删除我的Biz层和我的数据层之间的依赖关系(使用依赖注入),以便我的单元测试不必命中数据库.为此,我创建了一个我的上下文实现的简单接口IDataStore.
public interface IDataStore
{
void Insert<T>(T entity) where T:class;
void Update<T>(T entity) where T:class;
void Delete<T>(T entity) where T:class;
T GetById<T>(int id) where T:class;
IQueryable<T> All<T>() where T:class;
}
public partial class MyContext:DbContext,IDataStore
{
public void Insert<T>(T entity) where T:class{
this.Set<T>().Add(entity);
this.SaveChanges();
}
...
public IQueryable<T> All<T>() where T:class{
return this.Set<T>();
}
}
Run Code Online (Sandbox Code Playgroud)
使用IoC contianer,我能够将我的Biz层中的所有引用删除到MyContext(而不是引用IDataStore),但我仍然卡在引用我的特定实体类.在下面的例子中,我使用的是IDataStore,但我也使用了Data.Color(我的一个实体类).
public static void MyBizMethod(){
...
IDataStore store = myUnityContainer.Resolve<IDataStore>();
List<string> colorNames = store.All<Data.Color>().Select(c => c.name).ToList();
...
}
Run Code Online (Sandbox Code Playgroud)
我接下来要做的是创建一个IColor接口并使用一个分部类来使Data.Color实现IColor.然后,我修改了我的Biz层逻辑,调用DataStore.All <IColor>()而不是DataStore.All <Data.Color>();
public interface IColor{ …Run Code Online (Sandbox Code Playgroud) 我正在编写一个小型控制台应用程序,以尝试熟悉使用 async/await。在这个应用程序中,我不小心创建了一个无限递归循环(我现在已经修复了)。不过,这个无限递归循环的行为让我感到惊讶。它没有抛出StackOverflowException,而是陷入僵局。
考虑以下示例。如果Foo()使用runAsyncset to调用false,它会抛出一个StackOverflowException。但是当runAsyncis 时true,它会陷入僵局(或至少看起来会)。谁能解释为什么行为如此不同?
bool runAsync;
void Foo()
{
Task.WaitAll(Bar(),Bar());
}
async Task Bar()
{
if (runAsync)
await Task.Run(Foo).ConfigureAwait(false);
else
Foo();
}
Run Code Online (Sandbox Code Playgroud)