组wpf如何控制并将组发送到方法

时间:2015-12-19 18:45:15

标签: c# wpf

我有2个按钮,它们在不同的控件上执行相同的操作。我怎样才能做得更好?因为现在我复制/粘贴太多了。这是图像和代码。

enter image description here

    private void button_ClickOld(object sender, RoutedEventArgs e)
    {
        TextBoxOld.Text = SelectCatalog();
        if (File.Exists(TextBoxOld + ConfigFilePath))
        {
            GetClientProperty(TextBoxOld.Text);
            UpdateOldLabel();
        }
        else
        {
            LogsTextBox.AppendText("\nWrong folder selected - Config file doesn't exist");
        }
    }
    private void button_ClickNew(object sender, RoutedEventArgs e)
    {
        TextBoxNew.Text = SelectCatalog();
        if (File.Exists(TextBoxNew + ConfigFilePath))
        {
            GetClientProperty(TextBoxNew.Text);
            UpdateNewLabel();
        }
        else
        {
            LogsTextBox.AppendText("\nWrong folder selected - Config file doesn't exist");
        }
    }

XAML

 <Button x:Name="ButtonOld" Content="..." HorizontalAlignment="Left" Margin="149,35,0,0" VerticalAlignment="Top" Width="25" Click="button_ClickOld"/>
    <TextBox x:Name="TextBoxOld" HorizontalAlignment="Left" Height="23" Margin="24,35,0,0" Text="" VerticalAlignment="Top" Width="120" IsReadOnly="True"/>
    <Button x:Name="ButtonNew" Content="..." HorizontalAlignment="Left" Margin="447,35,0,0" VerticalAlignment="Top" Width="25" Click="button_ClickNew"/>
    <TextBox x:Name="TextBoxNew" HorizontalAlignment="Left" Height="23" Margin="322,35,0,0" Text="" VerticalAlignment="Top" Width="120" IsReadOnly="True"/>` <Label x:Name="OldNameLabel" Content="Name" HorizontalAlignment="Left" Margin="24,70,0,0" VerticalAlignment="Top"/>
    <Label x:Name="OldIpLabel" Content="IP" HorizontalAlignment="Left" Margin="24,100,0,0" VerticalAlignment="Top"/>
    <Label x:Name="OldWebpageUriLabel" Content="WebpageUri" HorizontalAlignment="Left" Margin="24,130,0,0" VerticalAlignment="Top"/>
    <TextBox x:Name="OldConnectionStringTextBox" Text="ConnectionString" HorizontalAlignment="Left" Margin="24,160,0,0" Width="120"
             VerticalAlignment="Top" Background="Linen" BorderThickness="0" IsReadOnly="True"/>
    <Label x:Name="NewNameLabel" Content="Name" HorizontalAlignment="Left" Margin="322,70,0,0" VerticalAlignment="Top"/>
    <Label x:Name="NewIpLabel" Content="IP" HorizontalAlignment="Left" Margin="322,100,0,0" VerticalAlignment="Top"/>
    <Label x:Name="NewWebpageUriLabel" Content="WebpageUri" HorizontalAlignment="Left" Margin="322,130,0,0" VerticalAlignment="Top"/>
    <TextBox x:Name="NewConnectionStringTextBox" Text="ConnectionString" HorizontalAlignment="Left" Margin="322,160,0,0" Width="120"
             VerticalAlignment="Top" Background="Linen" BorderThickness="0" IsReadOnly="True"/>
    <Label x:Name="ArrowLabel" Content="&lt;-" HorizontalAlignment="Left" Margin="221,14,0,0" VerticalAlignment="Top" FontSize="30" />
    <Label x:Name="OldVersionTextBoxLabel" Content="Old Version:" HorizontalAlignment="Left" Margin="24,4,0,0" VerticalAlignment="Top"/>
    <Label x:Name="NewVersionTextBoxLabel" Content="New Version:" HorizontalAlignment="Left" Margin="325,4,0,0" VerticalAlignment="Top"/>`

2 个答案:

答案 0 :(得分:0)

1)您可以重复使用代码

private void button_ClickOld(object sender, RoutedEventArgs e)
{
    ButtonHelper(TextBoxOld);
}
private void button_ClickNew(object sender, RoutedEventArgs e)
{
    ButtonHelper(TextBoxNew);
}
void ButtonsHelper(TextBox textBox) {
    TextBoxNew.Text = SelectCatalog();
    if (File.Exists(textBox + ConfigFilePath))
    {
        GetClientProperty(textBox.Text);
        UpdateNewLabel();
    }
    else
    {
        LogsTextBox.AppendText("\nWrong folder selected - Config file doesn't exist");
    }
}

2)在WPF中,使用MVVM,否则你只是没有WPF的优势

3)如果您在图片上标记了许多控件组,并且他们有很多代码,请进行控制。并且每个都包含它自己的xaml,它是自己的代码,你可以重用它。没有必要将所有xaml放在一个文件中。

答案 1 :(得分:0)

从你看来,你不了解MVVM和SOLID原则。如果你真的想要利用WPF,你必须首先学习MVVM,并且要真正利用MVVM,你需要了解SOLID。为了减轻冗长的XAML和样板代码的负担,您应该利用MVVM框架,Caliburn.Micro非常易于使用,但要求您拥有一个良好的架构才能充分利用它。

此外,使用MVVM将使您的XAML代码更加简单。旧版本和新版本部分只有一个UserControl,可能看起来像

<views:VersionView DataContext={Binding OldVersionViewModel}/>
<views:VersionView DataContext={Binding NewVersionViewModel}/>

一旦你学会了MVVM的强大功能,你就会为自己省去很多痛苦,并且很高兴你为你的UI选择了WPF。

但是,如果这只是一个小项目并且您坚持使用代码,那么您可以

private void button_ClickOld(object sender, RoutedEventArgs e)
{
    SelectVerifyAndLog(TextBoxOld, UpdateOldLabel);
}

private void button_ClickNew(object sender, RoutedEventArgs e)
{
    SelectVerifyAndLog(TextBoxNew, UpdateNewLabel);
}

void SelectVerifyAndLog(TextBox textBox, Action updateLabel)
{
    textBox.Text = SelectCatalog();
    if (File.Exists(textBox + ConfigFilePath))
    {
        GetClientProperty(textBox.Text);
        updateLabel();
    }
    else
    {
        LogsTextBox.AppendText("\nWrong folder selected - Config file doesn't exist");
    }
}