我是WPF的新手,试图建立一个项目,该项目遵循Josh Smith描述模型 - 视图 - 视图模型设计模式的优秀文章的建议.
使用Josh的示例代码作为基础,我创建了一个包含许多"工作区"的简单应用程序,每个工作区由TabControl中的选项卡表示.在我的应用程序中,工作空间是一个文档编辑器,它允许通过TreeView控件操作分层文档.
虽然我已成功打开多个工作区并在绑定的TreeView控件中查看其文档内容,但我发现TreeView在选项卡之间切换时"忘记"其状态.例如,如果Tab1中的TreeView部分展开,则在切换到Tab2并返回到Tab1后,它将显示为完全折叠.此行为似乎适用于所有控件的控件状态的所有方面.
经过一些实验,我意识到我可以通过将每个控件状态属性显式绑定到底层ViewModel上的专用属性来保留TabItem中的状态.然而,这似乎是很多额外的工作,当我只是希望我的所有控件在工作区之间切换时记住它们的状态.
我想我错过了一些简单的东西,但我不知道在哪里寻找答案.任何指导都将非常感谢.
蒂姆,谢谢
更新:
根据要求,我将尝试发布一些演示此问题的代码.但是,由于作为TreeView基础的数据很复杂,我将发布一个展示相同symtoms的简化示例.这是主窗口中的XAML:
<TabControl IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Path=Docs}">
<TabControl.ItemTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding Path=Name}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<view:DocumentView />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
Run Code Online (Sandbox Code Playgroud)
上面的XAML正确绑定到DocumentViewModel的ObservableCollection,其中每个成员都通过DocumentView呈现.
为了简化这个例子,我从DocumentView中删除了TreeView(如上所述),并将其替换为包含3个固定标签的TabControl:
<TabControl>
<TabItem Header="A" />
<TabItem Header="B" />
<TabItem Header="C" />
</TabControl>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,DocumentView和DocumentViewModel之间没有绑定.运行代码时,内部TabControl在切换外部TabControl时无法记住其选择.
但是,如果我显式绑定内部TabControl的SelectedIndex属性...
<TabControl SelectedIndex="{Binding Path=SelectedDocumentIndex}">
<TabItem Header="A" />
<TabItem Header="B" />
<TabItem Header="C" />
</TabControl>
Run Code Online (Sandbox Code Playgroud)
...到DocumentViewModel上的相应虚拟属性...
public int SelecteDocumentIndex { get; set; }
Run Code Online (Sandbox Code Playgroud)
...内部标签能够记住它的选择.
我知道我可以通过将这种技术应用到每个控件的每个视觉属性来有效地解决我的问题,但我希望有一个更优雅的解决方案.
是否有一种方法 - 除了for循环 - 在R数据帧中生成新变量,这将是现有的所有可能的双向交互?即假设一个具有三个数值变量V1,V2,V3的数据帧,我想生成以下新变量:
Inter.V1V2 (= V1 * V2)
Inter.V1V3 (= V1 * V3)
Inter.V2V3 (= V2 * V3)
Run Code Online (Sandbox Code Playgroud)
使用for循环的示例:
x <- read.table(textConnection('
V1 V2 V3 V4
1 9 25 18
2 5 20 10
3 4 30 12
4 4 34 16'
), header=TRUE)
dim.init <- dim(x)[2]
for (i in 1: (dim.init - 1) ) {
for (j in (i + 1) : (dim.init) ) {
x[dim(x)[2] + 1] <- x[i] * x[j]
names(x)[dim(x)[2]] <- paste("Inter.V",i,"V",j,sep="")
}
}
Run Code Online (Sandbox Code Playgroud) 我们的iPhone应用程序设置为美国商店.
有谁知道苹果在这个商店(或其中任何一个)用了一整天的时间段?例如,它是当天的2400-2359还是第二天0600的0600?
有任何想法吗?
干杯,詹姆斯
我有一个sql语句,如下所示,试图检索表中的最新条目.我有两个问题:
按ID或按日期订购会更好吗?
如何重写此sql语句以按日期重新排序?
SELECT id, comment, DATE_FORMAT(entry_date, '%W %H:%i') FROM comments ORDER BY id DESC LIMIT 10
Run Code Online (Sandbox Code Playgroud)我正在编写一个工作表,并想让学生编写一个如下所示的函数:
isPrime(int number)
Run Code Online (Sandbox Code Playgroud)
什么是那条线叫 - 清单浮现在脑海中,但我不认为那是......
我没有找到任何文档或教程.这样的事情存在吗?
doc.xpath('//table/tbody[@id="threadbits_forum_251"]/tr')
Run Code Online (Sandbox Code Playgroud)
上面的代码会让我任何table地方都有一个tbody属性id等于"threadbits_forum_251" 的子节点.但为什么从双开始//呢?为什么/tr最后呢?有关更多详细信息,请参阅" Ruby Nokogiri解析HTML表II ".
谁能告诉我如何提取href,id,alt,src,等,采用引入nokogiri?
td[3]/div[1]/a/text()' <--- extracts text
Run Code Online (Sandbox Code Playgroud)
我怎样才能提取其他东西?
我有一个MVC应用程序,因为我在添加客户端页面上有一个dropdownList.用户在下拉列表中选择状态.
在编辑页面上,我想要选择用户在添加客户端页面上选择的相同状态,请告诉我该怎么做.
谢谢你里兹
有没有人知道如何计算二维滤波器的逆?
假设我有一个3x3过滤器:
0 1 0
1 1 1
0 1 0
我想发现它是反向的.使用DFT很容易.但是,我想说我想通过卷积来做到这一点.现在,这就是问题,Matlab象征性不是我的专长.假设存在3X3反向滤波器,则意味着两者的卷积将导致:
0 0 0
0 1 0
0 0 0
问题是为此创建正确的方程组并求解它.使用符号进行操作很容易思考,但我无法做到.
有任何想法吗?谢谢.
PS我不确定这个有反向滤波器,因为它的DTFT中有零.
此外,有人应该像MathOverflow一样在这个论坛中允许Latex.
如何从mysql db表中检索文本字段,而不是整个文本,只有少数40个左右的字符.
这可以在sql中完成还是我需要使用php来完成?
基本上我要做的是显示前x个字符,然后让用户点击它来查看完整的内容.
任何人都可以解释HTTP-GET和HTTP-POST之间的区别吗?为什么人们说HTTP-POST在安全性方面较弱?
mysql ×2
php ×2
sql ×2
asp.net-mvc ×1
binding ×1
chop ×1
dataframe ×1
filter ×1
itunes-store ×1
mvvm ×1
nokogiri ×1
nomenclature ×1
r ×1
rest ×1
ruby ×1
sql-order-by ×1
state ×1
tabcontrol ×1
terminology ×1
wpf ×1
xpath ×1