c# - 在DataGrid wpf中更改组合框的选定值

标签 c# wpf mvvm

亲爱的,
我在数据网格中有一个组合框列,绑定(bind)到我的 ViewModel 中的可观察集合市场,而 DataGrid 绑定(bind)到集合 ClientMarketCode,它是 NewClient 对象中的集合。
ClientMarketCode 具有此属性 Code、MarketCodeTypeID、MarketID。
所以我使用绑定(bind)到市场的组合框以防用户想要编辑市场它显示所有市场并且用户选择他想要的市场。我在选择任何其他市场时遇到问题,因为所选行中的市场值在选择后没有改变来自组合框的新市场。

例如。:

假设第一行有 KSA 市场,然后我在单击 USA 后将其从组合框更改为 USA,它将 baco 返回到 KSA,我不知道 y。

这是我的 View 模型:

public class MarketsViewModel : ObservableObject, IMarketsViewModel, INavigationAware, IConfirmNavigationRequest, IRegionMemberLifetime
{
    #region MarketsViewModel
    public MarketsViewModel()
    {
        this.GetMarkets();
    }
    public ObservableCollection<Market> Markets
    {
        get { return m_Market; }
        set
        {
            m_Market = value;
            RaisePropertyChanged("Markets");
        }
    }

    private void GetMarkets()
    {
        try
        {
            Market[] MarketArr;

            using (var client = new ClientServiceProxy())
            {
                MarketArr = client.GetAllMarkets();
            }
            if (MarketArr != null)
            {
                this.Markets = new ObservableCollection<Market>(MarketArr);
            }
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }
}

这是 XAML:
<Custom:C1DataGrid x:Name="c1DataGrid"  
                   AutoGenerateColumns="False"

                   Height="490"  ItemsSource="{Binding    Path=NewClient.ClientMarketCodes,Mode=TwoWay,UpdateSourceTrigger=LostFocus,ValidatesOnDataErrors=True,ValidatesOnExceptions=True}">
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#FFBEBE00" Offset="0.5"/>
            <GradientStop Color="#FFEDED9A" Offset="0.496"/>
        </LinearGradientBrush>
    </Custom:C1DataGrid.HeaderBackground>
    <Custom:C1DataGrid.Columns>
        <!--<Custom:DataGridCheckBoxColumn  Header="Code"/>-->

        <Custom:DataGridTemplateColumn Header="Markets">
            <Custom:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding MarketCodeType.Market.NameA}"/>
                </DataTemplate>
            </Custom:DataGridTemplateColumn.CellTemplate>
            <Custom:DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <ComboBox Name="cmbMarkets" ItemsSource= "{Binding RelativeSource={RelativeSource FindAncestor,AncestorType=my:MarketsView},Path=DataContext.Markets,Mode=TwoWay}" 
DisplayMemberPath="NameA" SelectedValue="{Binding Path=MarketCodeType.Market.MarketID,Mode=TwoWay}" 
        SelectedValuePath="MarketCodeType.MarketID"
SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType=my:MarketsView},Path=DataContext.selectedMarket,Mode=TwoWay}"    />
                </DataTemplate>
            </Custom:DataGridTemplateColumn.CellEditingTemplate>
        </Custom:DataGridTemplateColumn> 


        </Custom:DataGridTemplateColumn>
    </Custom:C1DataGrid.Columns>

</Custom:C1DataGrid>

最佳答案

总结我的评论,您的绑定(bind)应该是:

<DataTemplate>
    <ComboBox Name="cmbMarkets" DisplayMemberPath="NameA"
              ItemsSource= "{Binding RelativeSource={RelativeSource FindAncestor,AncestorType=my:MarketsView},Path=DataContext.Markets}"
              SelectedItem="{Binding MarketCodeType.Market, Mode=TwoWay}"/>
</DataTemplate>

或(不太确定那个):
<DataTemplate>
    <ComboBox Name="cmbMarkets" DisplayMemberPath="NameA"
              ItemsSource= "{Binding RelativeSource={RelativeSource FindAncestor,AncestorType=my:MarketsView},Path=DataContext.Markets}"
              SelectedValue="{Binding MarketCodeType.Market.MarketID, Mode=TwoWay}"
              SelectedValuePath="MarketID"/>
</DataTemplate>

关于c# - 在DataGrid wpf中更改组合框的选定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18803376/

相关文章:

c# - 使用 ODBC 命令进行选择时出现错误 "ORA-00933: SQL command not properly ended"

wpf - wpf 列表框数据模板中的 keyup 事件

wpf - 从 wpf 中的 View 模型更新时,组合框的 SelectedItem 值变空

.net - TabControl中的WPF MVVM Light主-详细信息,使用消息传递所选项目

c# - 无法加载文件或程序集 'app_code' 或其依赖项之一

c# - 点击网页链接

wpf - 单击、拖动和滚动 Canvas View

c# - 从DataGrid按钮获取CommandParameter

c# - MVVM,对ViewModelLocator和DataTemplate感到困惑,导致ViewFirst vs ViewModel First

c# - 无法写入输出文件指定的路径/文件名太长?