我是.NET开发人员,想在C#中编写IOS和Android应用程序.我已经阅读了围绕Xamarin for Visual Studio的内容,如果不是很贵的话,看起来很有趣!
你需要一台Mac来调试代码吗?您是否只需要联网的Mac来实际将应用程序部署到商店?
是购买Mac并在虚拟机中使用VS运行Windows的最佳选择,还是只需使用我的Windows机器,在Windows中编写和调试代码,然后连接到联网的Mac进行最终部署?
我有一个主窗口,其中包含一个包含2 tabItem
秒的选项卡控件:
我目前有1个ViewModel
服务Tab1和Tab2.ViewModel
随着SOC模糊,这变得有点臃肿.我想将逻辑拆分为2个视图模型:ViewModel 1和ViewModel2.我的理解是您可以将主窗口设置DataContext
为包含ViewModel集合的Base ViewModel,然后您可以将每个TabItem断言为不同的ViewModel.
我见过的这些基本ViewModel示例公开了一个ObservableCOllection,如下所示:
private ObservableCollection<ViewModel1> _viewModelCollection
Public Observable Collection<ViewModel1> ViewModelCollection
{
get { return _viewModelCollection; }
set
{
_viewModelCollection = value;
OnPropertyChanged("ViewModelCollection");
}
}
public BaseViewModel()
{
ViewModelCollection = new ObservableCollection<ViewModel1>();
ViewModelCollection.Add(new ViewModel1(Tab1);
ViewModelCollection.Add(new ViewModel1(Tab2);
}
Run Code Online (Sandbox Code Playgroud)
但是如何为每个TabItem分配不同的ViewModel?我想要Tab1 = ViewModel1&Tab2 = ViewModel2?
单元测试新手。我有一个 WPF 客户端应用程序通过basicHttpbinding
. 一切都很好。我在我的 viewModel 中使用简单的构造函数依赖注入,传入一个IServiceChannel
然后我调用我的服务方法,例如:
IMyserviceChannel = MyService;
public MyViewModel(IMyServiceChannel myService)
{
this.MyService = myService;
}
Private void GetPerson()
{
var selectedPerson = MyService.GetSelectedPerson();
}
Run Code Online (Sandbox Code Playgroud)
然后我在客户端应用程序中添加了一个 MS 测试项目,我正在尝试使用 Moq 来模拟我的服务:
[TestMethod]
public void GetArticleBody_Test_Valid()
{
// Create channel mock
Mock<IIsesServiceChannel> channelMock = new Mock<IIsesServiceChannel>(MockBehavior.Strict);
// setup the mock to expect the Reverse method to be called
channelMock.Setup(c => c.GetArticleBody(1010000008)).Returns("110,956 bo/d, 1.42 Bcfg/d and 4,900 bc/d. ");
// create string helper and invoke the Reverse method …
Run Code Online (Sandbox Code Playgroud) 我有一个方法,尝试使用简单的where子句从我的数据库中提取记录.我有一个问题,因为我传入一个字符串值并将其与Guid(uniqueIdentifier)匹配.我需要将传递的值作为字符串绑定到DataGrid中,我需要该方法返回一个字符串.
显然在运行时,LinQ无法编译查询.该.ToString()
方法无法编译为SQL.有任何想法吗?
private string getFileLocation(string LinkGuid)
{
try
{
ISESEntities context = new ISESEntities();
string query = (from f in context.tbFileAttachments
where f.CCCPGUID.ToString() == LinkGuid
select f.FileLocation).First();
return query;
}
catch(Exception e)
{
blah blah
}
}
Run Code Online (Sandbox Code Playgroud) 我正在编写用户控件.Xaml和代码背后.为了绑定属性,后面的属性需要是一个依赖属性.了解.
那么为什么我可以绑定到INotifyPropertyChanged
在视图模型中实现的poco,该模型被设置为视图的数据上下文但不在后面的代码中?
XAML:
XAxis="{Binding ElementName=TimeSeriesChartControl, Path=XAxis}"
Run Code Online (Sandbox Code Playgroud)
代码背后:
public IAxis XAxis
{
get { return (IAxis)GetValue(XAxisProperty); }
set { SetValue(XAxisProperty, value); }
}
public static readonly DependencyProperty XAxisProperty =
DependencyProperty.Register("XAxis", typeof(IAxis), typeof(TimeSeriesChart), new PropertyMetadata(default(IAxis)));
Run Code Online (Sandbox Code Playgroud)
此属性必须是依赖项属性.如果我在这里实现clr属性,绑定将失败.
为什么我可以在视图模型类中实现clr属性,但不能在后面的代码中实现?
我刚刚开始使用 WPF MVVM & 我试图通过绑定到ObservableCollection
我的视图模型中的 来填充数据网格视图。
我使用了一个简单的 LINQ 查询从表中选择所有内容并填充我的可观察集合,但我的 UI 不会显示网格结果,大概是因为 XAML 必须绑定到公共属性?
private void getTableResults()
{
var query = from c in LDB.myTable
select c;
var results = query;
ObservableCollection<myTable> MyCollection = new ObservableCollection<myTable>(results);
OnPropertyChanged("MyCollection");
}
Run Code Online (Sandbox Code Playgroud)
这是我的 XAML 绑定:
<DataGrid ItemsSource="{Binding MyCollection}"
Run Code Online (Sandbox Code Playgroud)
我的DataContext
已设置,并且我已检查它是否与另一个硬编码属性绑定。我哪里错了?我在集合上放置了一个断点,以便知道它正在由结果填充。如何公开ObservableCollection
从 LINQ 结果填充的公共属性?
谢谢
补充一下,我的数据模型是 MyTable,它是一个 Entity Framework 4.0 edmx。
我正在尝试将SQL查询转换为Linq,以便从我的C#WPF应用程序中的命令调用.我试过使用Linqer,但查询不会翻译.我是Linq的新手,一直在读书.你使用Linq'JOIN'来解决这个问题吗?
update P
set P.versionid=a.versionid
from tbPublicationArticles P, tbarticles a
where P.articleid=a.articlesid
Run Code Online (Sandbox Code Playgroud) 我有一个简单的例程,它解析DateTime.Now
并执行.ToString()
它以将其添加到要保存的文件名中:
DateTime timeNow = DateTime.Now;
string dateNow = timeNow.ToShortDateString();
DateTime dateTime = DateTime.ParseExact(dateNow, "dd/MM/yyyy", CultureInfo.InvariantCulture);
string DateString = dateTime.ToString("dd-MMM-yy");
string fileName = string.Concat("MyArticle_" + region + "_" + DateString + fileExtension);
Run Code Online (Sandbox Code Playgroud)
这是结果输出字符串:
MyArticle_Africa_07-May-15.PNG
Run Code Online (Sandbox Code Playgroud)
这一切都很好,直到我在美国机器上获得日期时间设置不同的用户,例如
15年5月7日
在这种情况下,我的ParseExact()
方法抛出异常,因为输入不是有效的日期时间.有没有办法容纳所有日期时间输入并解析为dd/MM/YYYY?
通常,如果所有列表都是字符串类型我将使用:
var allLists = new[] { list1, list2, list3 };
bool result = allLists.All(l => l.Count == allLists[0].Count);
Run Code Online (Sandbox Code Playgroud)
或同等学历.但是,如果List1
是类型string
,List2
类型int
和List3
类型,double
那么我该如何实现上述目标?
Count
当尝试上述方法并且不想沿着以下路线走时,显然是不可用的:
if(List1.Count == List2.Count && List2.Count == List3.Count etc.
Run Code Online (Sandbox Code Playgroud) 我有一个ComboBox绑定到一个ObservableCollection,tbPublications
其中应该填充它.然后我从DataGrid中选择一行,它触发另一个我在其中插入新记录的Create表单tbPublications
,一切都很好.
当我关闭所述创建表单并返回到我的ComboBox表单时,我正在清理并重新读取我的一个新项目ObservableCollection
,将用户返回到他们刚刚创建的项目.然后ComboBox显示我新填充的集合中的一个项目,一切都很好.
我的问题是,在返回我的ComboBox表单时,新的出版物未设置为ComboBox显示中的选定项目,用户必须单击ComboBox然后选择该项目.
我无法SelectedIndex = "0"
在我的视图中使用XAML,因为我想ObservableCollection
在页面加载时在我的ComboBox中显示整个内容.
是否有任何方法可以在ViewModel中使用方法来解决这个问题,例如...
private void SetSelectedIndex()
{
if (MyObservableCollection.Count == 1)
{
//Set selected indexer to "0";
}
}
Run Code Online (Sandbox Code Playgroud)
找到了解决方案,不确定它是否是最干净的"MVVM"解决方案......
在我的ObservableCollection中读取后,我调用了这个方法:
if (_ModelPublicationsObservableList.Count == 1)
{
SelectedPublication = _ModelPublication;
SetSelectedIndex();
}
Run Code Online (Sandbox Code Playgroud)
这是获取当前主窗口并设置SelectedIndex的方法:
private void SetSelectedIndex()
{
ArticlesDataGridWindow singleOrDefault = (ComboBoxWindow)Application.Current.Windows.OfType<ComboBoxWindow>().SingleOrDefault(x => x.IsLoaded);
singleOrDefault.comboBox1.SelectedIndex = 0;
}
Run Code Online (Sandbox Code Playgroud)