我有一个WPF ListBox设置为水平滚动.ItemsSource绑定到我的ViewModel类中的ObservableCollection.每次添加新项目时,我都希望ListBox向右滚动,以便新项目可见.
ListBox在DataTemplate中定义,因此我无法在代码隐藏文件中按名称访问ListBox.
如何让ListBox始终滚动以显示最新添加的项目?
我想知道ListBox何时添加了一个新项目,但是我没有看到这样做的事件.
我是一名初学者.如何从lazySeq创建地图?
(def fields [:name :age :color])
(def values ["joe" 32 "red"])
(def record (interleave fields values))
(def mymap (into {} record)) ;; ????
;; (get mymap :age)
;; 32
Run Code Online (Sandbox Code Playgroud) 我的原型显示"文档",其中包含由缩略图图像表示的"页面".每个文档可以包含任意数量的页面.例如,可能有1000个文档,每个文档有5个页面,或者5个文档,每个文档有1000个页面,或者介于两者之间.文件不包含其他文件.在我的xaml标记中,我有一个ListBox
,其ItemsTemplate
引用的innerItemsTemplate也有一个ListBox
.我想要2级选定的项目,以便我可以对文档或页面执行各种操作(删除,合并,移动到新位置等).innerItemsTemplate ListBox
使用a WrapPanel
作为ItemsPanelTemplate
.
对于我有大量文档的情况,每个文档都有几个页面(比如10000个文档,每个页面有5个页面),滚动工作非常好,这要归功于UI虚拟化VirtualizingStackPanel
.但是,如果我有大量的页面,我会遇到问题.具有1000页的文档一次仅显示约50个(无论何种适合屏幕),当我向下滚动时,外部ListBox
移动到下一个文档,跳过不可见的950页左右.除此之外,VirtualzingWrapPanel
应用程序内存确实没有
增加.
我想知道我是否以正确的方式解决这个问题,特别是因为它有点难以解释!我希望能够显示10000个文档,每个文档1000页(仅显示适合屏幕的任何内容),使用UI虚拟化,以及平滑滚动.
如何在显示下一个文档之前确保滚动在文档中的所有页面中移动,并且仍然保持UI虚拟化?滚动条似乎只移动到下一个文档.
表示"文档"和"页面"似乎合乎逻辑 - 使用我当前ListBox
在a 中使用a的方法ListBox
?
我非常感谢你的任何想法.谢谢.
我有一个ComboBox,其SelectedItem绑定到ViewModel.
<ComboBox SelectedItem="{Binding SelItem, Mode=TwoWay}" ItemsSource="{Binding MyItems}">
Run Code Online (Sandbox Code Playgroud)
当用户在View ComboBox中选择一个新项目时,我想显示一个提示并确认他们想要进行更改.
在视图模型的SetItem属性设置器中,我显示一个对话框以确认选择.当他们说是的时候,它运作正常.
我的问题是,当用户点击"否"时,我不确定是谁让ComboBox恢复到之前的值.ViewModel中的Property具有正确的旧值,但在View中,ComboBox显示新选择的值.
我希望用户选择一个项目,确认他们要继续使用它,如果他们决定不这样做,我希望ComboBox恢复到上一个项目.
我怎么能做到这一点?谢谢!
使用Clojure,如何创建以下对象?该对象取自java代码(From Effective Java):
NutritionFacts cocaCola =
new NutritionFacts.Builder(240,8).calories(100).sodium(35).carbohydrate(27).build();
当按钮被禁用时,我正试图显示不同的图像; 我认为触发器很容易.
但是,当禁用该按钮时,我无法让图像源切换到禁用的图像.我已经尝试在图像和按钮上设置触发器.我的下面有什么问题?如何在启用/禁用按钮时更改图像源?
<Button
x:Name="btnName"
Command="{Binding Path=Operation}"
CommandParameter="{x:Static vm:Ops.OpA}">
<Button.Content>
<StackPanel>
<Image
Width="24"
Height="24"
RenderOptions.BitmapScalingMode="NearestNeighbor"
SnapsToDevicePixels="True"
Source="/MyAssembly;component/images/enabled.png">
<Image.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=btnName, Path=Button.IsEnabled}" Value="False">
<Setter Property="Image.Source" Value="/MyAssembly;component/images/disabled.png" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</StackPanel>
</Button.Content>
</Button>
Run Code Online (Sandbox Code Playgroud) 如果我有地图,例如,
(def mymap { :b 1 :a 2 :d 3 :e 4 :f 5})
Run Code Online (Sandbox Code Playgroud)
我可以使用val来获取所有值的序列
(vals mymap)
;=> (1 2 3 4 5)
Run Code Online (Sandbox Code Playgroud)
如何获取我自己的自定义顺序中的值序列,以获取示例
;=> (4 2 3 1 5)
Run Code Online (Sandbox Code Playgroud)
我最终想要做的是将值序列化为字符串,做这样的事情
(defn serialize [m sep] (apply str (concat (interpose sep (vals m)) ["\n"])))
Run Code Online (Sandbox Code Playgroud)
(此示例函数取自"将输入映射序列化为字符串"帖子)
但我需要指定vals的顺序.
(def tmp = [ 1 2 3 9 4 8])
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建2对,然后为每对,从第一个数字中减去第二个数字.期望的结果:(1 6 4)
这是我在尝试的:
(map #(apply - %2 %1) (partition 2 tmp))
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
Clojure初学者在这里..
如果我有一组地图,例如
(def kids #{{:name "Noah" :age 5}
{:name "George":age 3}
{:name "Reagan" :age 1.5}})
Run Code Online (Sandbox Code Playgroud)
我知道我可以得到这样的名字
(map :name kids)
Run Code Online (Sandbox Code Playgroud)
1)如何选择特定地图?例如,我想找回name ="Reagan"的地图.
{:name "Reagan" :age 1.5}
Run Code Online (Sandbox Code Playgroud)
可以使用过滤器完成吗?
2)如果返回年龄= 3的名字怎么样?
我正在尝试读取大型文本文件并计算特定错误的发生次数.例如,对于以下示例文本
something
bla
error123
foo
test
error123
line
junk
error55
more
stuff
Run Code Online (Sandbox Code Playgroud)
我想最终(虽然我在想地图,但不关心什么数据结构)
error123 - 2
error55 - 1
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所尝试的
(require '[clojure.java.io :as io])
(defn find-error [line]
(if (re-find #"error" line)
line))
(defn read-big-file [func, filename]
(with-open [rdr (io/reader filename)]
(doall (map func (line-seq rdr)))))
Run Code Online (Sandbox Code Playgroud)
这样称呼它
(read-big-file find-error "sample.txt")
Run Code Online (Sandbox Code Playgroud)
收益:
(nil nil "error123" nil nil "error123" nil nil "error55" nil nil)
Run Code Online (Sandbox Code Playgroud)
接下来,我尝试删除nil值并将项目分组
(group-by identity (remove #(= nil %) (read-big-file find-error "sample.txt")))
Run Code Online (Sandbox Code Playgroud)
返回
{"error123" ["error123" "error123"], "error55" ["error55"]}
Run Code Online (Sandbox Code Playgroud)
这接近期望的输出,尽管可能效率不高.我现在该如何获得计数?此外,作为一个新的clojure和函数式编程的人,我将不胜感激任何关于如何改进它的建议.谢谢!
(def data {"Bob" {"A" 3.5 "B" 4.5 "C" 2.0}
"Jane" {"A" 2.0 "B" 1.5 "D" 4.0}})
Run Code Online (Sandbox Code Playgroud)
调用
(merge-with + (data "Bob") (data "Jane"))
Run Code Online (Sandbox Code Playgroud)
产生
{"A" 5.5, "B" 6.0, "C" 2.0 "D" 4.0}
Run Code Online (Sandbox Code Playgroud)
我只想创建一个合并的地图,但仅限于公共密钥.我正在寻找的结果是
{"A" 5.5, "B" 6.0}
Run Code Online (Sandbox Code Playgroud)
在clojure中这样做的好方法是什么?