小编Rob*_*ler的帖子

如何在添加新项目时自动滚动ListBox?

我有一个WPF ListBox设置为水平滚动.ItemsSource绑定到我的ViewModel类中的ObservableCollection.每次添加新项目时,我都希望ListBox向右滚动,以便新项目可见.

ListBox在DataTemplate中定义,因此我无法在代码隐藏文件中按名称访问ListBox.

如何让ListBox始终滚动以显示最新添加的项目?

我想知道ListBox何时添加了一个新项目,但是我没有看到这样做的事件.

wpf scroll listbox

56
推荐指数
5
解决办法
4万
查看次数

clojure将lazy-seq转换为哈希映射

我是一名初学者.如何从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)

clojure hashmap

37
推荐指数
1
解决办法
2万
查看次数

带有ListBox的WPF ListBox - UI虚拟化和滚动

我的原型显示"文档",其中包含由缩略图图像表示的"页面".每个文档可以包含任意数量的页面.例如,可能有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

我非常感谢你的任何想法.谢谢.

wpf virtualization user-interface scroll listbox

26
推荐指数
4
解决办法
2万
查看次数

WPF ComboBox SelectedItem - 更改为以前的值

我有一个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恢复到上一个​​项目.

我怎么能做到这一点?谢谢!

wpf combobox selecteditem

20
推荐指数
2
解决办法
1万
查看次数

如何在Clojure中使用构建器模式创建类似Java的对象?

使用Clojure,如何创建以下对象?该对象取自java代码(From Effective Java):

NutritionFacts cocaCola = new NutritionFacts.Builder(240,8).calories(100).sodium(35).carbohydrate(27).build();

clojure

13
推荐指数
2
解决办法
1769
查看次数

按钮被禁用时如何更改图像?

当按钮被禁用时,我正试图显示不同的图像; 我认为触发器很容易.

但是,当禁用该按钮时,我无法让图像源切换到禁用的图像.我已经尝试在图像和按钮上设置触发器.我的下面有什么问题?如何在启用/禁用按钮时更改图像源?

<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)

wpf image button

12
推荐指数
1
解决办法
8510
查看次数

以特定顺序返回clojure映射值的序列

如果我有地图,例如,

(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的顺序.

clojure

12
推荐指数
1
解决办法
4636
查看次数

clojure映射对的序列

 (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

8
推荐指数
1
解决办法
2137
查看次数

clojure地图集 - 基本过滤

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的名字怎么样?

clojure

4
推荐指数
2
解决办法
425
查看次数

clojure读取大文本文件并计算出现次数

我正在尝试读取大型文本文件并计算特定错误的发生次数.例如,对于以下示例文本

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和函数式编程的人,我将不胜感激任何关于如何改进它的建议.谢谢!

clojure

4
推荐指数
1
解决办法
1326
查看次数

clojure merge-with删除不常见的键

(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中这样做的好方法是什么?

clojure map

0
推荐指数
1
解决办法
772
查看次数