2016-06-10 2 views
0

wpf의 다른 C# 클래스 (MainWindow 클래스는 물론)에 대한 텍스트 상자 및 레이블 컨트롤에 액세스해야합니다. x : FieldModifier = "public"을 사용했지만 여전히 음수입니다. 다른 클래스의 MainWindow 클래스 도구를 채울 수 있습니까? '다른 클래스의 MainWindow 클래스 도구에 액세스하는 방법 #

<Window x:Class="MyAbsClass.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:MyAbsClass" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <TextBox x:FieldModifier="public" x:Name="txt1"/> 
    <TextBox x:FieldModifier="public" x:Name="txt2"/> 
    <Button x:FieldModifier="public" x:Name="btn1" Content="Button" Click="btn1_Click"/> 
</Grid> 

namespace MyAbsClass 
{ 
class manipulate 
{ 
    public void add() 
    { 
     int a=int32.Parse(txt1.Text); 
     int b=int32.Parse(txt2.Text); 
    } 
} 

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent();    
    } 

    private void btn1_Click(object sender, RoutedEventArgs e) 
    { 
    MessageBox.Show("Added value= "+(a+b)); 
    } 
} 
} 

답변

0
var mainWindow = new MainWindow(); 
int a = int32.Parse(mainWindow.txt1.Text); 
int b = int32.Parse(mainWindow.txt2.Text); 
+0

이 코드로 문제를 해결할 수도 있지만 이점이 있습니다. 그것은 설명에서. – BDL

2
당신은 항상 클래스에이 정보를 전달해야한다

,이 문제의 분리이고 뷰가 변경 될 때 당신이 돈 보장 : 은 여기 내 간단한 예제 코드입니다 다른 클래스를 업데이트해야합니다. 또한 다른 클래스를 다시 사용할 수 있음을 의미합니다.

또한 WPF에서 잘못된 방식으로이 문제가 발생합니다. TextBox에서 값을 가져 오지 않으려면 TextBox에서 값을 설정해야합니다. 이것을 위해 바인딩을 사용해야합니다.

여기에 유용한 샘플이 있습니다. 질문에 직접 답변하지는 않았지만 올바른 방향으로 도움이되기를 바랍니다.

보기 :

<Window x:Class="WPFDynamicControls.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WPFDynamicControls" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525" > 
    <StackPanel> 
     <TextBox Text="{Binding BoxA}"/> 
     <TextBox Text="{Binding BoxB}"/> 
     <Button Content="Add" Click="btn1_Click"/> 
    </StackPanel> 
</Window> 

코드 숨김

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     this.DataContext = this; 
     InitializeComponent(); 
    } 

    public int BoxA { get; set; } 

    public int BoxB { get; set; } 

    private void btn1_Click(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show("Added value= " + Manipulate.Add(this.BoxA, this.BoxB)); 
    } 
} 

public static class Manipulate 
{ 
    public static int Add(int a, int b) 
    { 
     return a + b; 
    } 
} 
0

당신이 원하는 것은 무엇인가를 검색하는 클래스에 액세스 그냥 실제로 당신은 간단하게 만들 수를 조작하거나 변경할 경우 이 값을 원하는 객체의 미러 :

public partial class MainWindow : Window 
{ 
    public static TextBox txt1Mirror; 
    public static TextBox txt2Mirror; 

    public MainWindow() 
    { 
     InitializeComponent(); 
     txt1Mirror = txt1; 
     txt2Mirror = txt2; 
    } 

    private void btn1_Click(object sender, RoutedEventArgs e) 
    { 
     Manipulate.Add(); 
    } 
} 

public static class Manipulate 
{ 
    public static void add() 
    { 
     int a = int32.Parse(MainWindow.txt1Mirror.Text); 
     int b = int32.Parse(MainWindow.txt2Mirror.Text); 
    } 
    public static void Add() 
    { 
     MessageBox.Show("Added value= " + (a + b)); 
    } 
} 
관련 문제