关闭或取消设置对话框时会修改数据-wpf c#



这就是我想要实现的:在我的应用程序上,单击某个按钮时会打开一个新窗口。此窗口是用于选择某些应用程序设置的对话框。我希望在用户按"确定"时接受这些更改,在用户关闭对话框或按"取消"时放弃这些更改。

此对话框的结构是一个用于选择设置页面的树状视图,以及一个根据所选treeViewItem更改其内容的框架。在其中一个设置页面中,我有一个包含项的ListView(这些项是在运行时添加的)。这些项是一个名为CustomListViewItems的自定义类,具有两个属性:Name和Number。此CustomListViewItems项在ListView中显示为IntegerUpDown,用于选择数字和名称的TextBlock。这是用DataTemplate和Binding属性完成的,如下代码所示:

<ListView Margin="5, 3, 5, 3" Grid.Row="1" Name="listView" VerticalAlignment="Stretch" Height="150" Width="300">
    <ListView.ItemTemplate>
        <DataTemplate>
            <WrapPanel>
                <xctk:IntegerUpDown Minimum="0" Maximum="9" Value="{Binding Number}"></xctk:IntegerUpDown> 
                <TextBlock Text="{Binding Name}" Margin="5,0,0,0" />
            </WrapPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

在后面的代码中,我有一个CustomListViewItems类型的ObservableCollection作为成员变量,它保存列表视图中的项。(在创建页面时与ItemsSource List视图链接。一旦这些项目在ListView上列出,就可以通过更改IntegerUpDown的值来修改它们的属性。

有一个Preference.cs类保存这些设置。这个类有一个类型为CustomListViewItems的List作为成员变量,只有在用户在PreferenceDialog上按OK后才会写入。如果我在Preference.cs的SetPreferences和GetPreferences方法上放置断点,我会验证每次创建PreferenceDialog时GetPreferences都会中断(正如预期的那样,因为对话框在创建时显示当前首选项),并且每当用"确定"按钮而不是用"取消"或"关闭"按钮关闭"首选项对话框"时,SetPreferences就会中断(这也是意料之中的事,但奇怪的是,当我在用"取消或关闭"按钮关闭"设置对话框"后再次打开它时,preferences.cs返回的首选项会被修改!!)。我不保存这些首选项,但不知何故它们被保存了(我猜可能是由于绑定)。

此处的代码对应于btnDialogOk_Click:

private void btnDialogOk_Click(object sender, RoutedEventArgs e)
{
    if (((PreferencesPage1)mPreferencesPages[0]).AcceptPreferences())
    {
        var customItems = ((PreferencesPage1)mPreferencesPages[0]).GetItems();
        mPreferences.ClearcustomItems();
        mPreferences.SetcustomItems(customItems);
        this.DialogResult = true;
    }
    else
    {
    MessageBox.Show("Number must be unique on its own category", "Error",
                    MessageBoxButton.OK, MessageBoxImage.Exclamation);
    }
}

我的对话框是由MainUserControl创建的,它包含OpenPreferences按钮。这是创建对话框的代码的平静:

private void OpenPreferencesButton_Click(object sender, RoutedEventArgs e)
    {
        PreferencesDialog preferencesDialog = new PreferencesDialog(mPreferences);
        preferencesDialog.ShowDialog();
    }

我试图解决在取消时打开并恢复首选项后创建CustomListViewItems的"备份"列表的问题,但CustomListViewItems的备份列表也被修改了。有人能告诉我如何解决这个问题吗?也许我没有正确理解绑定的概念,我绑定了一些错误的东西。

如果你想为Ok Close, and Cancel buttons编码,你想设置你的对话框,比如这个

DialogResult result = MessageBox.Show(string.Format("{0} Do you want to save changes?", "Some Name for your Popup Dialog"), "Confirmation", MessageBoxButtons.YesNoCancel);
if (result == DialogResult.Yes)
{
    //do work
}
else if (result == DialogResult.No)
{
    //...
}
else if (result == DialogResult.Cancel)
{
    //...
}

最新更新