Как отправить информацию из одного окна в другое? WPF

1

Как отправить информацию из одного окна wpf в другое окно. Я хотел, чтобы string filepath по string filepath сохранял информацию, которую он получает при первом вызове.

Это проблема, когда я нажимаю button1 из window1.xmal.cs он называет openfile() от DocumentManager.cs. И когда я достигаю filepath из window2.xmal.cs дает пустую строку. Я хочу сохранить строку filepath, с которой я получил, когда она была вызвана из window1.xmal.cs.

Вот что я имею:

window1.xmal.cs

DocumentManager mgr = new DocumentManager();

private void Button1_Click(object sender, RoutedEventArgs e) {
        ImageSource imgsource = new BitmapImage(new Uri(mgr.openfile().ToString())); 
        themeImage.Source = imgsource;
}

DocumentManager.cs

public string filePath;
public object openfile() {
    OpenFileDialog open = new OpenFileDialog();
    bool? result = open.ShowDialog();

    if (result == true) {
        filePath = open.FileName;  
    }
    return filePath;
}
  • 1
    Вы не должны объявлять свой экземпляр менеджера документов в событии нажатия кнопки, если только вы не возражаете против того, что экземпляр будет потерян навсегда, как только он выйдет из области видимости ...
  • 0
    о, на самом деле у меня нет такого в моем коде. Позвольте мне это исправить.
Показать ещё 2 комментария
Теги:
wpf

1 ответ

1
Лучший ответ

Я думаю, что ваша проблема заключается в том, как вы создаете экземпляр класса DocumentManager.
Я сделал пример, который работает. Здесь код:

MainWindow

public partial class MainWindow : Window
{   DocumentManager mgr;       
    Window2 w2;
    public MainWindow() { InitializeComponent(); }
    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {  mgr = new DocumentManager(); w2 = new Window2(); w2.Show(); }
    private void Button_Click(object sender, RoutedEventArgs e)
    { ImageSource imgsource; string imglocation;
        try {
            imglocation = mgr.openfile().ToString();
            imgsource = new BitmapImage(new Uri(imglocation));
            result.Text = imglocation;
            w2.imgsource = imgsource;
        }
        catch (Exception ex)
        { System.Windows.MessageBox.Show(ex.Message); }
    }
}

DocumentManager

class DocumentManager
{
    public string filePath;
    public string openfile()
    {
        Microsoft.Win32.OpenFileDialog open = new Microsoft.Win32.OpenFileDialog();
        bool? result = open.ShowDialog();
        if (result == true) { filePath = open.FileName; }
        else { filePath = "Nothing Opened"; }
        return filePath;
    }
}

MainWindow XAML

<Window x:Class="CrossClassDialog.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="120" Width="350" Loaded="MainWindow_Loaded">
    <Grid>
        <Button Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Click="Button_Click"/>
       <TextBlock x:Name="result" HorizontalAlignment="Left" Text="TextBlock" VerticalAlignment="Top" Margin="0,30,0,0"/>
    </Grid>
</Window>

Window2 XAML

<Window x:Class="CrossClassDialog.Window2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window2" Height="300" Width="300">
<Grid>
    <Viewbox HorizontalAlignment="Left" VerticalAlignment="Top">
        <Image x:Name="OpenedImage" Source="{Binding ImageSource}" />
    </Viewbox>
</Grid>
</Window>

Добавьте это свойство в Window2

    private ImageSource _imgsource;
    public ImageSource imgsource
    {
        get { return _imgsource; }
        set 
        { 
            _imgsource = value;
            OpenedImage.Source = value;
        }
    }

Кстати, я изменил несколько вещей, подобных типу вашего метода openfile().

  • 0
    Но мне нужно знать, как я могу получить string imglocation отображаемое в другом окне (window2.xmal.cs), без необходимости повторного вызова openfile() .
  • 0
    @FJam Я добавил второе окно и использую свойство для обновления изображения там.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню