none
WPF 绑定? RRS feed

  • 问题

  • <WrapPanel HorizontalAlignment="Center" VerticalAlignment="Bottom" Visibility="{Binding KeyboardVisibility}">
                    <WrapPanel Width="546" Orientation="Horizontal" x:Name="keyborad1" Background="#eeeeee">
                        <Button Content="A" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="B" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="C" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="D" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="E" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="F" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="G" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="H" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="I" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="J" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="K" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="L" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="M" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="N" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="O" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="P" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="Q" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="R" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="S" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="T" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="U" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="V" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="W" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="X" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="Y" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="Z" Margin="5,5,5,5" Height="67" Width="68" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="切换输入法" Margin="5,5,5,5" Height="67" Width="146" FontSize="18" Style="{StaticResource BtnKeyYellow}"/>
                    </WrapPanel>
                    <WrapPanel Height="309" Orientation="Vertical" Background="#eeeeee">
                        <Button Content="1" Margin="5" Width="96" Height="67" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="4" Margin="5" Width="96" Height="67" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="7" Margin="5" Width="96" Height="67" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="-" Margin="5" Width="96" Height="67" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="2" Margin="5,5,5,5" Width="96" Height="67" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="5" Margin="5,5,5,5" Height="67" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="8" Margin="5,5,5,5" Height="67" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="0" Margin="5,5,5,5" Height="67" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="3" Margin="5,5,5,5" Width="96" Height="67" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="6" Margin="5,5,5,5" Height="67" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="9" Margin="5,5,5,5" Height="67" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="." Margin="5,5,5,5" Height="67" FontSize="18" Style="{StaticResource BtnKeyboard}"/>
                        <Button Content="隐藏字母" Width="120" Margin="5,5,5,5" Height="67" FontSize="18" Style="{DynamicResource BtnKeyYellow}"/>
                        <Button Content="←" Margin="5,5,5,5" Height="67" FontSize="18" Style="{StaticResource BtnKeyGreen}"/>
                        <Button Content="确定" Margin="5,5,5,5" Height="145" FontSize="18" Style="{StaticResource BtnKeyGreen}"/>
                    </WrapPanel>
                </WrapPanel>

     上面的代码是一个xaml中的部分,作用是用于虚拟键盘,放在触摸设备上使用。点击其中按钮,文本框中会显示对应的字母或数字(即Button的Content属性值)。

    我想表达的是:之前用的是Code Behind方式,实现了功能。目前正在重构项目,为MVVM模式。即对按钮的一些动作进行binding,在ViewModel中进行处理,不在Code Behind中处理。但不知如何实现。求教各位牛牛,感谢。

    备注:在Code Behind方式编码时,给WrapPanel添加ButtonBase.Click事件就可进行相关处理了。

    2015年8月11日 9:22

答案

  • listbox的itemsource 绑定数据源不就OK?,干嘛一定要在界面写呢?组装数据,交给界面展示就行了,

    我上面给你写的界面里面用一个usercontrol,绑定content在viewmodel里面写

    WrapPanel wrapPanel=new WrapPanel();
    foreach(var r in string[]{"A","B"})
    {

    Button btn = new Button { Content = r, Style = this.FindResource("ExecuteButtonStyle") as Style };
                btn.Click += btn_Click;
                wrapPanel.Children.Add(grid);
    }

    这也是一个方案。

    方法很多

    2015年8月11日 11:13

全部回复

  • <Button Command="{Binding BtnSubmitCommand}" CommandParameter="A"/>
    2015年8月11日 9:37
  • <Button Command="{Binding BtnSubmitCommand}" CommandParameter="A"/>
    这样导致每个都要写,重复太多了。我意思是能否像ButtonBase.Click这种抽象到一个父控件上来全局处理。
    2015年8月11日 9:39
  • 你的界面写的都很繁琐,这么多button 为什么不用listbox,修改listbox模板。使用selectitem岂不是更简洁
    2015年8月11日 9:42
  • 你的界面写的都很繁琐,这么多button 为什么不用listbox,修改listbox模板。使用selectitem岂不是更简洁
     听起来不错,我试试~  因为现在这个是同事搞的,一直这么用,我陷入思维定式了。
    2015年8月11日 9:45
  • WrapPanel wrapPanel=new WrapPanel();
    foreach(var r in string[]{"A","B"})
    {

    Button btn = new Button { Content = r, Style = this.FindResource("ExecuteButtonStyle") as Style };
                btn.Click += btn_Click;
                wrapPanel.Children.Add(grid);
    }

    界面 UserControl.Content绑定 WrapPanel 就也OK

    2015年8月11日 9:54
  • 你的界面写的都很繁琐,这么多button 为什么不用listbox,修改listbox模板。使用selectitem岂不是更简洁
    我想了想,好像不对额。用listbox跟之前这种有区别么?不一样还要添加listboxitem么
    2015年8月11日 10:13
  • listbox的itemsource 绑定数据源不就OK?,干嘛一定要在界面写呢?组装数据,交给界面展示就行了,

    我上面给你写的界面里面用一个usercontrol,绑定content在viewmodel里面写

    WrapPanel wrapPanel=new WrapPanel();
    foreach(var r in string[]{"A","B"})
    {

    Button btn = new Button { Content = r, Style = this.FindResource("ExecuteButtonStyle") as Style };
                btn.Click += btn_Click;
                wrapPanel.Children.Add(grid);
    }

    这也是一个方案。

    方法很多

    2015年8月11日 11:13
  • listbox的itemsource 绑定数据源不就OK?,干嘛一定要在界面写呢?组装数据,交给界面展示就行了,

    我上面给你写的界面里面用一个usercontrol,绑定content在viewmodel里面写

    WrapPanel wrapPanel=new WrapPanel();
    foreach(var r in string[]{"A","B"})
    {

    Button btn = new Button { Content = r, Style = this.FindResource("ExecuteButtonStyle") as Style };
                btn.Click += btn_Click;
                wrapPanel.Children.Add(grid);
    }

    这也是一个方案。

    方法很多

          这段代码放在什么一个UserControl或窗口里?肯定不能放在单纯的类文件里,因为单纯的类文件没法用this.FindResource获取样式。另外btn事件如何对接我总窗口中的textbox值?
    2015年8月12日 7:55
  • Button btn = new Button { Content = r, Style = this.FindResource("ExecuteButtonStyle") as Style };

    改为

    Button btn = new Button { Content = r };
    btn.Style = btn.FindResource("ExecuteButtonStyle") as Style;

    貌似你对wpf了解不深啊

    2015年8月17日 2:27